2013-06-21 32 views
5

更新Ember JS数组未反映在视图中。Ember JS,更新未在视图中反映的数组

控制器

App.MyController = Ember.ArrayController.extend({ 
    results: [], 
    init: function(){ 
    _this = this 
    App.MyModel.find({}).then(function(contents) { 
     obj1 = contents.objectAt(0) 
     obj1.get('data').hasMany.results.forEach(function(item){ 
      _this.results.push(item) 
     }); 
    }) 
    //rest of the code 
    } 
}) 

模板

{{#each results}} 
    // show items of reults. 
{{/each}} 

这是一块在其中我是从服务器中获取数据的代码,并且在它的加载,我将其推入结果的数组。 从服务器加载数据需要一些时间,所以模板映射到空结果数组上。理想情况下,结果数组应该更新模板中的东西,但在逻辑上它不应该。

有没有人知道我失踪的地方?或做错了。

在此先感谢。

回答

15

对于绑定工作,您必须使用pushObject而不是push。烬阵列pushObject

App.MyController = Ember.ArrayController.extend({ 
    results: [], 
    init: function(){ 
    _this = this; 
    App.MyModel.find({}).then(function(contents) { 
     obj1 = contents.objectAt(0); 
     obj1.get('data').hasMany.results.forEach(function(item){ 
     _this.results.pushObject(item) 
     }); 
    }) 
    //rest of the code 
    } 
}); 

富勒更多信息,请参阅here

希望它有帮助。

+0

你刚刚救了我的一天。谢谢你,兄弟。 –

+0

请注意,您的数组需要是'Ember.NativeArray',它也是'MutableArray'。如果你有扩展原生js数组原型的烬,那么原生js数组将具有'.pushObject(thing)'函数。如果你不扩展本地原型,你将需要使用'Ember.A([])'。 [更多关于Ember.A()](https://emberjs.com/api/ember/3.0/functions/@ember%2Farray/A) –

0

我有类似的问题。问题是Ember没有得到有关阵列变化的通知。在这种情况下,你有一个特殊的Ember函数(pushObject),它取代了标准的Push,并通知了框架的变化。但在其他情况下(例如Array.splice),您没有这样的功能,所以您需要手动通知框架。你可以这样做:

this.notifyPropertyChange('array'); 
相关问题