次のコードを検討してください。
// data comes from AJAX call response (entity from db)
var template = ko.mapping.fromJS(data);
if ( isAddMode ) {
self.selectedCategory().EmailTemplates.push(template);
self.selectedTemplate(template);
} else {
// why can't this work?!?
//vmTemplates.selectedTemplate(template);
// have to do this instead...
self.selectedTemplate().Name(template.Name());
self.selectedTemplate().Subject(template.Subject());
self.selectedTemplate().Content(template.Content());
}
メール テンプレートを編集するためのダイアログがあります。テンプレートが保存されると、マッピング プラグインを使用して、AJAX 呼び出しからの応答から「テンプレート」オブジェクトが作成されます。
新しいテンプレート (isAddMode) を作成している場合は、テンプレートを配列にプッシュしてから、selectedTemplate() を設定できます。これにより、テンプレートを追加するダイアログが閉じた後、メイン UI のすべての最新のフィールドを表示するエディタ フィールドが表示されます。
ただし、テンプレート (UI 上の同じエディター) を更新する場合は、selectedTemplate() をマップされたテンプレート オブジェクトに設定したいと思います。ただし、これは効果がありません。これを達成できる唯一の方法は、個々のプロパティを上記のように設定することです。新しいオブザーバブルをプッシュするときのように、一度にこれを実行できないのはなぜですか? 新しいオブザーバブルが古いものから何らかの形で切り離されているという事実と関係があるように感じます。