多基因敲除绑定和分享他们(multiple knockout bindings and sharin

2019-10-17 15:42发布

所以,我有一种情况,我在我的主页上已经淘汰赛结合。

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但为了这个目的它不是那么重要。

Answer 1:

我不喜欢有视图模型之间的依赖关系,所以我以前用过一个jQuery发布订阅插件,以便视图模型互相交谈处于分离的方式。 你可以看到它的一个例子这个答案

基本上,当你更新面包屑,请拨打新阵列发布,另一种观点模型将订阅该事件。



Answer 2:

一个简单的解决方案( 但不是很干净的 ),是将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>


文章来源: multiple knockout bindings and sharing them