在等待缓慢的AJAX调用完成时,不显示未加载的中间结果的推荐模式是什么?
E.g。我有一些像这样的控制器代码:
this.set('content', function () { Model.find(/* return some long running operation */) });
当应用程序正在等待该函数返回某些数据时,它会将页面内容设置为空对象。
理想情况下,如果已经加载的内容将保持显示,直到新内容准备好呈现。实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
承诺是一个很好的模式。
var _this = this;
App.ModelObject.find(...).then(function(results){
_this.set('content', results)
}
你没有说ModelObject#find
是你自己实现的,或者你是否使用了库,所以承诺可能是开箱即用的东西,或者你自己使用Ember实现的东西。 RSVP。
答案 1 :(得分:0)
我实现了这个(在加载新对象时,这是在我的控制器中):
var _this = this;
search = App.ModelObject.find(...);
search.addObserver('property_that_exists_on_loaded_+object', function (search) {
_this.set('content', search);
});
我不确定但是这可能会遗漏一些代码,以便在加载后移除观察者,这是使用addObserver
的大多数示例。
如果在addObserver
注册到对象之前更新了该属性,我也不确定是否会触发它。