ko observable没有得到更新

时间:2016-12-08 11:47:58

标签: knockout.js

我无法使用knockout observable创建双向绑定。数据正在初始化,但在点击功能期间更新值(UI中的x)是我发现困难的地方。任何帮助都会很棒,因为我是新手,从客户角度转换为角度转换 演示: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()); 

2 个答案:

答案 0 :(得分:3)

首先,您将this.x指定为ko.observable(这使其成为ko.observable函数的函数引用):

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

在下一行中,您告诉this.x 而不是成为常规字符串变量,会覆盖 ko.observable函数引用:

this.x = "something1";

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

this.x("something1");

此外,您的点击约束应为click: test而不是click: test(),否则您将分配给点击处理程序,无论执行text() 返回

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

Updated fiddle

答案 1 :(得分:1)

当你将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());