1

ノックアウトバインディングが更新されていません。設定したフィールドがあります

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/

4

3 に答える 3

2

あなたが書くとき

new AppViewModel()

新しいAppViewModelオブジェクトを作成しています。ただし、そのオブジェクトへの参照を保存することはありません。

を更新しようとするとAppViewModel.firstName(name);AppViewModelはコンストラクター関数であり、コンストラクター関数に存在しないメソッドを呼び出しています。オブジェクトを変数として作成し、それを参照する必要があります。

var app = new AppViewModel();

...

app.firstName(name);

これがあなたのフィドルのアップデートです、それは今働いています。

于 2013-03-22T01:55:03.447 に答える
2

実際のオブジェクトではなくAppViewModelクラスを参照しています...ノックアウトでバインドする前にビューモデルをインスタンス化してから、インスタンスを参照してください。

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/

于 2013-03-22T01:55:45.420 に答える
0

名前更新機能をモデルの外に残す理由はありますか?

これはどうですか:http://jsfiddle.net/dvdrom000/d577K/41/

htmlの更新

<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());
于 2013-03-22T02:18:00.713 に答える