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