我有一个搜索结果页面,它是使用EmberJS开发的。我使用Ember.Route从API加载数据。我使用的搜索API非常慢。所以我们决定从缓存API加载数据。但问题是,缓存可能有一些旧数据。因此,我们决定使用搜索API在已加载的页面中重新加载数据。
我现有的路线代码看起来像这样
define(‘search’, ['jquery'], function($) {
var route = Ember.Route.extend({
model: function() {
return searchApiCall( someParameter );
},
setupController: function(controller, model) {
controller.set('model', model);
}
});
return route;
});
在上面的代码中,我只是调用搜索API并返回json响应。但是,我想要的是如下所示。
define(‘search’, ['jquery'], function($) {
var route = Ember.Route.extend({
model: function() {
setTimeout(function(){
return searchApiCall( someParameter );
}, 10);
return cachedSearchResult( someParameter );
},
setupController: function(controller, model) {
controller.set('model', model);
}
});
return route;
});
所以我在上面的代码中看到的是首先传递缓存的结果,然后以某种方式从实际的搜索API中加载结果。
请告诉我,在EmberJS中最好的方法是什么。
答案 0 :(得分:0)
我的方法是使用afterModel钩子,就像这样...虽然你的Ember版本看起来有点旧,但希望可以使用。
const set = { Ember };
define(‘search’, ['jquery'], function($) {
var route = Ember.Route.extend({
model: function() {
return {
searchResults: cachedSearchResult( someParameter );
};
},
setupController: function(controller, model) {
controller.set('model', model);
},
afterModel: function(model) {
let searchResults = searchApiCall( someParameter );
set(model, 'searchResults', searchResults);
}
});
return route;
});