我很好奇model.set('propertyName', propertyValue)
与store.update('modelType', {id: 1, propertyName: propertyValue})
的区别
某些上下文:在我的应用程序中,您单击一个按钮来运行后台任务,一旦完成,我的应用程序将使用ajax从数据库中获取数据。数据更新后,显示数据的组件将更新并显示新数据。
当后台任务完成时,我尝试在我的控制器中执行以下操作:
var self = this;
return Ember.$.get('someURL').done(function(data) {
// This deserializes the data so all attribute names are camelCase
data = deserializeData(data)
// At this point, data = {id: 1, attrOne: "valueOne", attrTwo: "valueTwo"}
self.store.update('modelName', data);
});
不幸的是,这不会触发视图中的任何更新,因此我的组件不会反映新数据。实际上,当我尝试执行this.get('model.attrOne')
时,它会返回模型的旧数据。
然后我尝试了以下内容:
var self = this;
this.store.findById('modelName', modelId).then(function(model) {
return Ember.$.get('someURL').done(function(data) {
// This deserializes the data so all attribute names are camelCase
data = deserializeData(data)
// At this point, data = {id: 1, attrOne: "valueOne", attrTwo: "valueTwo"}
model.setProperties(data)
});
});
现在,当我这样做时,一切都按预期工作,视图会正确地更新新数据。
我不明白为什么后者而不是前者呢?