Knockout绑定不更新

时间:2013-03-22 01:49:40

标签: javascript knockout.js

我的淘汰赛绑定没有更新。我有一个我设置为

的字段
this.firstName = ko.observable("Bert");

我打电话的时候:

AppViewModel.firstName(name);

我需要它来更新。这是一个jsfiddle:

function AppViewModel() {
    this.firstName = ko.observable("Bert");
    this.lastName = ko.observable("Bertington");
}
// Activates knockout.js
ko.applyBindings(new AppViewModel());

// When I click button I want the name to change
$('input[type=button]').click( function() {
    var name = 'New Name';
    AppViewModel.firstName(name);
});    

http://jsfiddle.net/d577K/38/

3 个答案:

答案 0 :(得分:2)

写作时

new AppViewModel()

您正在创建一个新的AppViewModel对象。但是,您永远不会保存对该对象的引用。

当您尝试更新AppViewModel.firstName(name);时,AppViewModel是您的构造函数,并且您正在调用构造函数中不存在的方法。您需要将对象创建为变量,然后引用它。

var app = new AppViewModel();

...

app.firstName(name);

以下是fiddle的更新,现在正在使用。

答案 1 :(得分:2)

您正在引用AppViewModel类而不是实际对象...尝试在使用knockout绑定之前实例化视图模型,然后引用实例:

function AppViewModel() {
    this.firstName = ko.observable("Bert");
    this.lastName = ko.observable("Bertington");
}
var vm = new AppViewModel();
// Activates knockout.js
ko.applyBindings(vm);

//When I click button I want the name to change
$('input[type=button]').click( function() {
var name = 'New Name';
vm.firstName(name);

});

这是小提琴: http://jsfiddle.net/d577K/178/

答案 2 :(得分:0)

是否有任何理由将名称更新功能保留在模型之外?

这个怎么样:http://jsfiddle.net/dvdrom000/d577K/41/

html update

<input type="button" value="test" data-bind="click: NewName" />

<强> JS

function AppViewModel() {
    this.firstName = ko.observable("Bert");
    this.lastName = ko.observable("Bertington");

    this.NewName = function(){
        this.lastName("New name");
    }
}
// Activates knockout.js
ko.applyBindings(new AppViewModel());