Knockout.js KnockoutJS-有没有简单的方法用一个对象覆盖可观察的对象?
考虑以下代码:Knockout.js KnockoutJS-有没有简单的方法用一个对象覆盖可观察的对象?,knockout.js,Knockout.js,考虑以下代码: // 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)
// 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()设置为映射的模板对象。然而,这没有效果。我能做到这一点的唯一方法是如上所述设置每个单独的属性。为什么我不能像推一个新的可观测对象那样一次就做到这一点?我觉得这与新的观测值与旧的观测值在某种程度上是分离的这一事实有关。你试过:
ko.mapping.fromJS(template,self.selectedTemplate);
试着推一下
// 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);
// try it!
self.selectedTemplate.Push(template);
}
你能用小提琴再现那种行为吗?到目前为止似乎对我有效:为什么注释掉的一个是
vmTemplates
,而不是self
?vmTemplates是保存模型的变量,self是模型中对“this”的引用,所以我使用哪个版本无关紧要。