这在一定程度上取决于您的应用程序的大小,以及您的视图正在呈现的元素数量。
编辑:您可能会成功观察 RecordArray 的 isLoaded 属性。这里的一些细节:https ://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/record_arrays/adapter_populated_record_array.js#L21
我用于将单个对象作为其内容的视图的一个选项是:
MyApp.CustomView = Ember.View.extend({
content: null,
contentObserver: function() {
this.rerender();
}.observes('content')
}
但是,如果您的视图内容是一个列表,那么为列表中的每个项目重新呈现视图几乎没有意义。
但是,我认为这种方法与您已经在做的非常相似。
另一种方法是使用 Ember Data 实现您自己的适配器。这样,您可以告诉应用程序的其余部分它已完成数据加载。就像是:
MyApp.Adapter = DS.Adapter.create({
//Finding all object of a certain type. Fetching from the server
findAll: function(store, type, ids) {
var url = type.url;
jQuery.getJSON(url, function(data) {
store.loadMany(type, data);
});
//Perform some custom logic here...
}
}
这应该可行,但它不像它应该/可能的那样通用。
此外,您可能想查看此提交,它允许注册一次性事件。
https://github.com/emberjs/ember.js/commit/1809e65012b93c0a530bfcb95eec22d972069745#L0R19