Emberjs:将数据加载到控制器的首选方法是什么?

时间:2012-12-26 08:02:03

标签: ember.js ember-data

我可以想到4个选项:

1)在路由器中:

connectOutlets: function(router) {
    router.get('applicationController').connectOutlet(outlet, controller/view, router.get('store').findAll(Model);
}

每次调用connectOutlet时都会调用findAll

2)在控制器的init中:

App.MyController = Ember.ArrayController.extend({
    init: function() {
        this._super();
        this.set('content', App.router.get('store').findAll(Model));
    }
});

只有在第一次实例化控制器时才会调用findAll。

3)直接分配给控制器的内容:

App.MyController = Ember.ArrayController.extend({
    content: App.router.get('store').findall(Model)
});

这也会在第一次实例化控制器时调用findAll,但是如果我这样做,我会收到错误 - Uncaught TypeError: Cannot call method 'get' of undefined所以路由器可能还没有实例化。

4)调用控制器的功能来从路由器分配数据:

connectOutlets: function(router) {
    router.get('applicationController').connectOutlet(outlet, controller/view, router.get('store').findAll(Model);
    router.get('myController').getData();
}

App.MyController = Ember.ArrayController.extend({
    getData: function() {
        this.set('content', App.router.get('store').findAll(Model));
    }
});

与第一个选项相同的评论。

我的问题是,在控制器中分配数据的首选方式或“Ember方式”是什么?

1 个答案:

答案 0 :(得分:2)

我非常有信心说选项1是Ember方式。

connectOutlets: function(router) {
  router.get('applicationController').connectOutlet(outlet, Model.find());
}

2&的问题3默认情况下您不希望在控制器初始化时加载数据,因为这会使数据的延迟加载/分页变得困难。

听起来你的主要问题是每次进入路线时调用findAll。 但是,如果您使用的是DS.RESTAdapter或类似的,那么这是一个非问题,因为身份映射将捕获第二个呼叫,因此只会在第一次查询服务器。