Ember.js Jaydata和余烬设定了古怪

Ember.js Jaydata和余烬设定了古怪,ember.js,jaydata,Ember.js,Jaydata,通过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(); 但它不起作

通过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();
但它不起作用

然后我终于用这个黑客(?)

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的anwer吼叫和评论


事实证明(显然)这只发生在OData提供商身上(没有测试其他提供商)。无法使用WebSQL进行复制。

设置程序无效,您正在将
todo
设置为未定义

//init at start
controller.set('todo',  todoDB.Todos.attachOrGet({ Id:1}));

删除并完成

此外,如果您试图从控制器中获取todo,那么应该使用getter,这是不必要的

controller.get('todo').save();

设置器无效,您正在将
todo
设置为未定义

//init at start
controller.set('todo',  todoDB.Todos.attachOrGet({ Id:1}));

删除并完成

此外,如果您试图从控制器中获取todo,那么应该使用getter,这是不必要的

controller.get('todo').save();


关键是,您正在控制器上设置对todo的引用,但您没有设置它,然后当您稍后尝试使用todo时,您正在设置完全不同的值。你在他的主页上从哪里复制的?哦!!我明白了!刚刚看到你的个人资料。。。你是一个余烬狂热分子!我现在明白了。不用担心;-)你是说没有黑客?是的,我在回答中添加了这两个例子。请原谅,刚刚做了肩部手术,css单手操作太多了。重点是,你在控制器上设置了todo的引用,但你没有设置它,然后,当您稍后尝试使用todo时,您正在设置完全不同的值。你在他的主页上从哪里复制的?哦!!我明白了!刚刚看到你的个人资料。。。你是一个余烬狂热分子!我现在明白了。不用担心;-)你是说没有黑客?是的,我在回答中添加了这两个例子。请原谅,刚刚做了肩部手术,css单手工作太多了。你能试着用“新”来实例化你的实体吗?比如var todo=newtododb.Todos.elementType({Id:1});然后您可以将其添加到上下文中,或者将其entityState设置为$data.entityState.Modified。你的黑客是没有必要的,它应该只是工作谢谢@GaborDolla!这就是我在我的应用程序中所做的!以上只是一个拙劣的尝试来解释我的问题。实际上,当使用OdataProvider通过余烬集进行设置时,不会更新\u changedProperties。但是,如果我显式地设置它,它就会工作。你想让我在GitHub上提交问题吗?如果提交问题,你能创建一个JSFIDLE吗?它应该独立于所使用的提供程序。@GaborDolla,我刚刚创建了一个FIDLE来尝试复制。但是没有运气!我能看到的唯一区别是我使用的提供者,根据你最后的评论,它不应该有什么区别。我现在没有时间也没有资源来建立一个虚拟的wcf服务来进行测试,所以我现在就不做了。我还是觉得很奇怪!那一定是我的代码出了问题!您能尝试用“new”实例化您的实体吗?比如var todo=newtododb.Todos.elementType({Id:1});然后您可以将其添加到上下文中,或者将其entityState设置为$data.entityState.Modified。你的黑客是没有必要的,它应该只是工作谢谢@GaborDolla!这就是我在我的应用程序中所做的!以上只是一个拙劣的尝试来解释我的问题。实际上,当使用OdataProvider通过余烬集进行设置时,不会更新\u changedProperties。但是,如果我显式地设置它,它就会工作。你想让我在GitHub上提交问题吗?如果提交问题,你能创建一个JSFIDLE吗?它应该独立于所使用的提供程序。@GaborDolla,我刚刚创建了一个FIDLE来尝试复制。但是没有运气!我能看到的唯一区别是我使用的提供者,根据你最后的评论,它不应该有什么区别。我现在没有时间也没有资源来建立一个虚拟的wcf服务来进行测试,所以我现在就不做了。我还是觉得很奇怪!那一定是我的代码出了问题!