Javascript Ember.set和Ember.setProperties给出不同的结果
我在Javascript Ember.set和Ember.setProperties给出不同的结果,javascript,ember.js,ember-observable,Javascript,Ember.js,Ember Observable,我在Ember应用程序中遇到了一个问题,其中使用Ember.set和Ember.setProperties设置多个属性会导致后者出现错误。在这里构建了一个精确的场景 哈佛商学院: Name: {{name}}<br> Place: {{place}}<br><br> <button {{action "modifyTogether"}}>this.setProperties({name:"Vignesh Raja",place:"Namakkal
Ember
应用程序中遇到了一个问题,其中使用Ember.set
和Ember.setProperties
设置多个属性会导致后者出现错误。在这里构建了一个精确的场景
哈佛商学院:
Name: {{name}}<br>
Place: {{place}}<br><br>
<button {{action "modifyTogether"}}>this.setProperties({name:"Vignesh Raja",place:"Namakkal"})</button>
<br><br><br>
<button {{action "modifySeperately"}}>this.set("name","Vignesh Raja");<br>this.set("place","Namakkal");</button>
<br><br><br>
When set seperately, we get the latest value - {name:"Vignesh Raja", place:"Namakkal"}<br>
When set together, we get the latest value from the observer- {name:"Vignesh Raja", place:"Chennai"}<br>
<br>
<br>
import Ember from 'ember';
export default Ember.Controller.extend({
name:"Vignesh",
place:"Nmkl",
handleName1 : function(){
this.set("place","Chennai");
}.observes("name"),
actions:{
modifyTogether:function(){
this.setProperties({name:"Vignesh Raja",place:"Namakkal"})
},
modifySeperately:function(){
this.set("name","Vignesh Raja");
this.set("place","Namakkal");
}
}
});
在上面的代码中,单击第一个按钮(
Ember.setProperties
)给出名称:Vignesh Raja Place:Chennai
,但单击第二个按钮(多个Ember.set
)给出Name:Vignesh Raja Place:Namakkal
我遇到的问题是由于Ember Observer
分配给Name
属性造成的
单独更新时,首先this.set(“name”,“Vignesh Raja”)
设置name
属性的值。然后它的观察者被解雇,place
属性被更改为Chennai
。在这些之后,第二条语句,this.set(“place”,“Namakkal”)
被激发。因此,我们得到Namakkal
作为最终值
因此结果-名称:Vignesh Raja Place:Namakkal
一起更新时,Ember.setProperties
会缓冲观察者,直到更新所有传递的属性。它使用Ember.beginPropertyChanges
对属性更改进行分组,值更改通知不会发送给观察者。一旦设置了属性,就会调用Ember.endPropertyChanges
,然后将通知发送给观察者。所以在上面的例子中,this.setProperties({name:“Vignesh Raja”,place:“Namakkal”})
,设置属性name
和place
,完成后,观察者将属性place
更改为Chennai
因此结果-名称:Vignesh Raja地点:钦奈
因此,如果使用
Ember.setProperties
,请确保您设置的任何属性的任何观察者都不会更改其他属性的值。旁注:您不应使用观察者设置Ember自身的状态。