1
次のJavaScriptコードを使用すると、ボタンクリック時にmodify()関数が呼び出されたときにperson.Nameプロパティが更新されないのはなぜかと思います。剣道UI MVVMの不明な動作
var person = {
Id: 1,
Name: "John"
};
var model = kendo.observable({
start: function() {
kendo.bind($("#test"), this);
},
modify: function(){
var self = this;
self.Name = "John Doe";
console.log(self.Name);
console.log(person.Name);
}
});
var person = $.extend({}, person, model);
person.start();
JSFiddle LINK
私の質問にお答えいただきありがとうございます。 私が共有したコードは、私が検討していたもっと大きなコードの簡略化されたバージョンです。私があなたが共有した例を理解していますが、それが私の質問に答えるかどうかわかりません。 私のコードで、person.start()が呼び出されたとき、私の理解は、 "this"がpersonオブジェクトを参照すべきです。 startメソッドでkendo.bindを呼び出す前にperson.Idを更新することで確認できます。 – Joe
問題ありません@ジョー。最初の2つの文は問題を述べていますが、ここではさらに詳しく説明します。 $ .extendを呼び出すと、新しいオブジェクトが最初のパラメータとして使用されます。したがって、そのオブジェクトと対話しているときは、コードの最初に定義されたpersonオブジェクトと対話していません。あなたのコードスニペットをフォークして分かりやすくするためのコメントを追加しました。https://jsfiddle.net/Fresh/corovmn1/ –
Hey @BenSmith、もう一度ありがとうございます。 $ .extendへの呼び出しが最初のパラメータとして新しいオブジェクトを使用していると言っていますが、このオブジェクトをpersonに再割り当てします。したがって、$ .extend(person、model)を呼び出すのと基本的に同じです。 私は問題が何かを発見したと思う:person.start()を呼び出す前に、人は観察可能なオブジェクトでなければならない。 $ .extendが観測可能なオブジェクト(モデル)を観測不可能なオブジェクト(人物)と組み合わせると、結果は観測不可能なオブジェクトになります。それを動作させる2つの方法があります:https://jsfiddle.net/bqhpfj2j/5/とhttps://jsfiddle.net/bqhpfj2j/6/ – Joe