所以,我有一种情况,我在我的主页上已经淘汰赛结合。
Index.cshtml:
<div data-bind="foreach breadcrumbs">
<div>
<script>
var IndexViewModel = function () {
var self = this;
self.breadcrumbs = ko.observableArray();
};
ko.applyBindings(IndexViewModel);
</script>
而且该Index.cshtml内加载的局部视图。 局部视图都有自己的基因敲除绑定:
<div id="someId">
</div>
<script>
var PartialViewModel = function () {
var self = this;
self.someFunction = function(){
// Access Breadcrumbs here
};
};
ko.applyBindings(PartialViewModel, "someId");
</script>
我想从第二部分视图访问面包屑observableArray和项目添加到他们。 我不是,如果这有可能,甚至肯定。 请帮忙。 我也使用sammy.js但为了这个目的它不是那么重要。
我不喜欢有视图模型之间的依赖关系,所以我以前用过一个jQuery发布订阅插件,以便视图模型互相交谈处于分离的方式。 你可以看到它的一个例子这个答案
基本上,当你更新面包屑,请拨打新阵列发布,另一种观点模型将订阅该事件。
一个简单的解决方案( 但不是很干净的 ),是将indexViewModel存储在一个全局变量。
Index.cshtml:
var IndexViewModel = function () {
var self = this;
self.breadcrumbs = ko.observableArray();
};
// we create a global variable here
window.indexViewModel = new IndexViewModel();
ko.applyBindings(window.indexViewModel);
然后你可以从你的局部视图模型访问此indexViewModel:
var PartialViewModel = function () {
var self = this;
self.someFunction = function(){
// Access Breadcrumbs here
// better use some wrapping functions
// instead of accessing the array directly
window.indexViewModel.breadcrumbs.push({});
};
};
ko.applyBindings(new PartialViewModel(), "someId");
</script>