どうか、誰かがこれを手伝ってくれますか?
createメソッドを実行すると、次のエラーが発生します。
*Uncaught TypeError: Object #<Object> has no method 'baseUri'*
このメソッドは、次のバインディングから呼び出されます。
<form id="createProducts" data-bind="submit: products.create">
PreLoadメソッドから呼び出されるreadメソッドが実行されると、baseUriとitemsの両方が使用可能になります。
ビューモデルが関数として定義されている場合、この問題の解決策を見つけましたが、私の場合は、オブジェクトとして定義されています。
これは私の完全なJSファイルです
var mm = {
/* Products ********************************************************** */
products: {
items: ko.observableArray([]),
read: function () {
$.getJSON(this.baseUri(), this.items);
},
create: function (formElement) {
$.post(this.baseUri(), $(formElement).serialize(), null, "json")
.done(function (o) {
alert("The Product " + o.Name + " was created.");
this.items.push(o);
});
},
baseUri: function () { return BASE_URI; }
}
};
function PreLoad() {
mm.products.read();
ko.applyBindings(mm);
}
- BASE_URIはマスターページで定義されたグローバル変数です。ネストされたビューモデルが複数あり(このコードから切り取ったものです)、各baseUriはBASE_URI+"some_string_value"の合成であるため必要です。とにかく、リストに表示されている値を更新するには、アイテムにもアクセスする必要があります。
ありがとう!