Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.set和Ember.setProperties给出不同的结果_Javascript_Ember.js_Ember Observable - Fatal编程技术网

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自身的状态。