3

在使用 Ember.js 和 Ember 数据时,Model.find()我希望能够绑定一个处理程序,一旦结果中的记录可用,该处理程序就会被调用DS.RecordArray。我找到了解决方案,但我觉得必须有更好的方法。

我当前的解决方案使用Array.addArrayObserver,例如对于一些虚构的模型,App.Widget

// Find the widgets!
var widgets = App.Widget.find();

// Get notified when widget records are available...
var arrayObserver = Ember.Object.create({
    arrayWillChange: function(start, removeCount, addCount) {
        // Widget records are about to be loaded.
    },
    arrayDidChange: function(start, removeCount, addCount) {
        // Widget records have now been loaded.
        var myWidget = widgets.objectAt(0);
    }
});

// Add the above arrayObserver to the widgets array
widgets.addArrayObserver(arrayObserver);

这是实现我想要的既定方法,还是有更好的方法?

4

2 回答 2

1

在绑定到所需数据的控制器中,您可以观察 content.isLoaded 属性,一旦存储适配器加载数据,该属性将设置为 true:

contentLoaded: function() {
    console.log('controller content is loaded from store');
}.observes('content.isLoaded')
于 2013-03-14T20:25:26.253 回答
1

你可以使用Promises来实现这一点......

// Find the widgets!
App.Widget.find()
    .then(function(widgets) {
        var myWidget = widgets.objectAt(0);
    });
于 2013-07-01T20:42:20.463 回答