如何使用EmberJS

时间:2017-10-23 16:23:20

标签: javascript ember.js

我有一个搜索结果页面,它是使用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中最好的方法是什么。

1 个答案:

答案 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;
});