所以我有一个场景,我的主页上有敲门声。
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,但为了这个目的,它并不相关。
答案 0 :(得分:2)
我不喜欢在视图模型之间存在依赖关系,因此我之前使用了jQuery pubsub插件来允许视图模型以解耦的方式相互通信。您可以在this answer
中查看相关示例基本上,当您更新痕迹导航时,请使用新阵列调用publish,而另一个视图模型将订阅该事件。
答案 1 :(得分:0)
一个简单的解决方案(但不是很干净)将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>