两个视图模型之间的淘汰赛传递值

Posted

技术标签:

【中文标题】两个视图模型之间的淘汰赛传递值【英文标题】:Knockout Passing Value between two view models 【发布时间】:2014-04-01 06:13:42 【问题描述】:

如何在两个不同的视图模型中传递元素的可见属性。假设在 1 个视图模型中我的可见是假的,在另一个视图模型中的点击功能我想让它可见。是否可以使用 Knockout。

   ViewModel1 = function() 
        var self = this;
        this.dataItem = ko.observable(false);
      ;

视图模型 2

   ViewModel2 = function() 
      var self = this;

      // Click Function
      this.showItem= function()
          ViewModel1.dataItem = ko.observable(true);
      ;
    ;

【问题讨论】:

看看这里的答案:***.com/questions/9293761/… 我建议添加一些代码来说明您正在尝试做什么,否则您可能会遇到问题被关闭的风险。 ***.com/questions/how-to-ask 谢谢 Tanner,参考链接中的解决方案不适合我。还有其他解决方案吗?感谢您的建议,我会用一些代码更新我的问题。 在 ViewModel2 中你调用 this.ViewModel1,但肯定是试图在 viewmodel2 中调用一个名为 ViewModel1 的变量? 抱歉@Alexander Troup,我只是编辑了那个。仍然没有得到输出。 【参考方案1】:

您应该试试出色的knockout-postbox。它旨在促进不同视图模型之间的解耦通信。

在您的情况下,您可以像这样使用它:

注意: syncWith 用于双向通信,如果你想要单向通信,那么你应该尝试 subscribeTopublishOn 方法。

视图模型 1

ViewModel1 = function() 
               var self = this;
               this.dataItem = ko.observable(false).syncWith("visible", true); 
             ;

视图模型 2

ViewModel2 = function() 
               var self = this;

               self.dataItem = ko.observable().syncWith("visible", true); 

               // Click Function
               this.showItem= function()
                    self.dataItem = ko.observable(true);
               ;
             ;

【讨论】:

【参考方案2】:
// Click Function
this.showItem= function()
    ViewModel1.dataItem(true);
;

【讨论】:

以上是关于两个视图模型之间的淘汰赛传递值的主要内容,如果未能解决你的问题,请参考以下文章

从 aspnetmvc 序列化时忽略淘汰视图模型上的属性

在部分视图 MVC5 之间传递视图模型

如何处理淘汰视图模型中的多对多关系

在淘汰赛中解除视图模型与视图的绑定

淘汰赛视图模型映射停止订阅触发

杜兰达尔/淘汰赛。更新其他视图/视图模型