【问题标题】: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);
      };
    };

【问题讨论】:

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

标签: knockout.js


【解决方案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);
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 2011-12-21
      • 1970-01-01
      • 2017-12-10
      相关资源
      最近更新 更多