考虑以下代码:
// 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() 设置为映射的模板对象。但是,这没有效果。我能做到这一点的唯一方法是如上所述设置每个单独的属性。为什么我不能像推送一个新的 observable 那样一次性做到这一点?我觉得这与新的 observables 在某种程度上与旧的 observables 分离这一事实有关。