在Ember中同时使用同一控制器的多个实例

时间:2013-03-29 14:36:38

标签: javascript model-view-controller controller ember.js

刚观看Ember Peepcode视频。它给我带来的一件事是控制器是单例,因此每个Controller的一个实例在运行时创建,控制器的数据属性根据需要进行交换。

但是当您在屏幕上需要同一个控制器的多个版本并同时处于活动状态时会发生什么。如果我有多个example.handlebars模板会发生什么情况,每个模板都需要同时在屏幕上由自己的ExampleController版本支持?

Ember如何处理这种情况?

2 个答案:

答案 0 :(得分:5)

有几种方法可以解决这个问题(在previous answer中提到)。

方法1:

带模型的

{{render}}(需要最新的Ember.js版本):

{{render "example" example1}}
{{render "example" example2}}

方法2:

2014年7月7日更新:{{control}}已从Ember> = 1.0中删除。

{{control}}(它仍然有问题,所以尽可能避免)

{{control "example"}}

但首先需要在加载ember.js文件之前启用标记:ENV.EXPERIMENTAL_CONTROL_HELPER = true

还有一个错误,你需要通过这样做来解决:

App.register('controller:example', App.ExampleController, {singleton: false }

方法3:

{{each}}itemController一起使用。

{{#each controller itemController="example"}}
  {{view "example"}}
{{/each}}

每次都会创建一个新的单独实例。

答案 1 :(得分:0)

我发现如果你覆盖控制器的init方法并将内容设置为新对象(或者你正在使用的任何对象),你可以拥有多个独立的实例。

App.MyMultipleController = Ember.ObjectController.extend({
    content: {},

    init: function(){
        this.set('content', {});
        return this._super.call(this, arguments);
    }
});

这是一个JSFiddle。它出于我自己的目的使用ObjectProxy,但如果您愿意,可以使用ObjectControllerhttp://jsfiddle.net/jgillick/D83d8/