【问题标题】:ko observable is not getting updatedko observable 没有更新
【发布时间】:2016-12-08 21:22:07
【问题描述】:

我无法使用可观察到的淘汰赛创建双向绑定。数据正在正确初始化,但在单击功能期间更新值(UI 中的 x)是我发现困难的地方。任何帮助都会非常有用,因为我是刚从 Angular 为客户进行淘汰赛的新手,
演示:https://jsfiddle.net/govardhan_s92/abq9j5t4/1/

提前致谢。

HTML:

<div class='liveExample'>
    <p data-bind="text:x,click:test()"></p>
</div>

Javascript:

var ViewModel = function() {
    this.x=ko.observable("");
    this.x = "something 1";
    this.test = function() {
        this.x = "something 2"
    }
};

ko.applyBindings(new ViewModel()); 

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    首先将this.x 分配为ko.observable(这使它成为ko.observable 函数的函数引用):

    this.x = ko.observable("");
    

    在下一行中,您告诉this.x 改为 成为常规字符串变量,它覆盖 ko.observable 函数参考:

    this.x = "something1";
    

    如果您想更新可观察变量的值(记住:它是一个函数!),您需要将其作为函数参数传递给变量,而不是将新值分配给变量(这覆盖 可观察的):

    this.x("something1");
    

    此外,您的点击绑定应该是click: test 而不是click: test(),否则无论执行text() 返回,您都会将其分配给点击处理程序。

    <p data-bind="text: x, click: test"></p>
    

    Updated fiddle

    【讨论】:

    • 我喜欢你的回答,因为你不仅展示了正确的例子(它是如何工作的),而且你解释了为什么不工作(淘汰赛世界的原则)。
    【解决方案2】:

    当您将 ko.observable() 分配给 x 时,this.x 成为一个接受要更新的新值的函数

    你需要这样做

    var ViewModel = function() {
        this.x=ko.observable("");
        this.x("something 1");
        this.test = function() {
            this.x("something 2")
        }
    };
    
    ko.applyBindings(new ViewModel()); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 2013-10-16
      • 2014-08-21
      • 2020-09-14
      • 2018-03-31
      • 2014-11-24
      • 1970-01-01
      相关资源
      最近更新 更多