为什么在从其他控制器引用控制器时调用Ember Controller init?

时间:2014-01-15 14:20:44

标签: javascript ember.js ember-data

这个问题与this earlier question I asked.有关我认为我有解决方案,但它似乎比我原先想象的要复杂得多。我已经成功地在控制器上实现了Ember Crossfilter,但是当我需要从索引控制器调用该控制器上的动作时,例如,通过执行以下操作:

App.IndexController = Em.ObjectController.extend({
  needs: ['cats', 'dogs'],
  actions: {   
    indexAction: function() {      
      this.get('controllers.cats').send('catAction');
      this.get('controllers.dogs').send('dogAction');
    }
  }
});

事实证明,相应的猫狗控制器已完全重建。这可能通常不是一个大问题,但如果那些猫和狗控制器正在实现像crossfilter这样的东西,让他们重建每个动作可能效率不高。

我在这里有一个充分的例子:http://jsbin.com/IVaMUPO/6/edit?js,console,output

您可以看到,在新负载下,每个控制器都在调用_createCrossfilter方法和_createDimensions方法。这些是在init方法中启动的。按下dogActioncatAction按钮可以达到预期效果,一切都很花哨。

问题在于,点击indexAction时,dogActioncatAction都会被踢,但这会在两个控制器上再次调用init

这是正确的行为吗?有没有解决的办法?谢谢你的帮助。

0 个答案:

没有答案