通过Ember设置时,JayData EntitySet似乎无法捕获属性更改像这样:
//init at start
controller.set('todo', todoDB.Todos.attachOrGet({ Id:1}));
//later in app
controller.set('todo.Completed', true);
//in the end
todoDB.saveChanges();
我试过这个:
controller.todo.save();
但是它不起作用!
然后我终于处理好了这个HACK(?):
var self = this;
mdefs = self.get('todo').getType().memberDefinitions;
for (var name in mdefs) {
if (mdefs[name]
&& mdefs[name].kind == "property"
&& mdefs[name].definedBy == self.todo.getType())
self.todo._setPropertyChanged(mdefs[name]);
}
self.get('todo').save();
所以我的问题是…有什么漂亮的方法可以做到这一点吗?
编辑
看看@kingpin2k的怒吼和评论!
它(显然)只发生在OData提供者身上(尚未测试其他提供者)。无法使用WebSQL进行复制。
setter无效,您正在将todo
设置为未定义。
//init at start
controller.set('todo', todoDB.Todos.attachOrGet({ Id:1}));
http://emberjs.jsbin.com/AyIMIBi/1/edit
删除并完成
http://emberjs.jsbin.com/AyIMIBi/2/edit
此外,尽管没有必要,如果你试图从控制器中获取todo,你应该使用getter。
controller.get('todo').save();