1

所以我有一个场景,我的主页上有淘汰赛绑定。

索引.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,但出于这个目的,它并不那么相关。

4

2 回答 2

2

我不喜欢视图模型之间必须有依赖关系,所以我之前使用了一个 jQuery pubsub 插件来允许视图模型以解耦的方式相互通信。你可以在这个答案中看到一个例子

基本上,当您更新面包屑时,使用新数组调用发布,另一个视图模型将订阅该事件。

于 2013-01-30T14:31:43.110 回答
0

一个简单的解决方案(但不是很干净)是将 indexViewModel 存储在全局变量中。

索引.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>
于 2013-01-30T14:44:27.447 回答