10 の異なるセクションを持つ巨大なページを構築しており、イベント バインディングなどに Knockout を使用しています。
各セクションには、フィールドと検証プロパティなどを備えた独自のviewModelを含むフォームが含まれています。マルチビューモデルに関するこの投稿を読んだ後、パターン化しました。
多くの subViewModel をインポートする masterViewModel があります。これはすべて正常に機能しており、フィールド入力などで自動入力される監視可能な要素を設定できます.
以下のように、フォーム送信をviewModelの関数にバインドしています。
フォーム フィールドを (ajax 投稿経由で) 検証して保存した後、セクションを読み取り専用モードにしたいのですが、ajax 呼び出しの成功コールバックで viewModel のハンドルを取得する方法がわかりません。
<form action="webservice.php" method="POST" data-bind="submit: contactInformation.validateSubmit">
this.validateSubmit = function(formElement){
var result = ko.validation.group(this, {deep: true});
if (!this.isValid()) {
result.showAllMessages(true);
return false;
}
//actually save stuff, call ajax, submit form, etc;
// setup a promise
var posting = $.post( "./webservice.php", $(formElement).serialize() );
posting.done(function( data ) {
this.contactInformation.model_state("summary"); // Uncaught TypeError: Cannot call method 'model_state' of undefined
// i also tried the line below, instead of line above...
ko.mapping.updateFromJS(this, data); // Uncaught TypeError: Cannot call method 'updateFromJS' of undefined
});
};
誰もこれを行う方法を知っていますか? contactInformation.validateSubmit() 関数からの formElement のハンドルがあります。どこかでリスナーを手動でサブスクライブする必要がありますか? または、モデルを $(formElement).data('model') から切り離す方法はありますか?
どんな助けでも大歓迎です。
ありがとう、 -- スコット