使用Ember.js呈现模型位于rootElement之外的模板

使用Ember.js呈现模型位于rootElement之外的模板,ember.js,Ember.js,我正在将Ember.js添加到现有的rails应用程序中,并在创建Ember.application时使用rootElement选项 在这个rootElement之外有几个地方,我想插入一个绑定到简单ember.Object模型的小余烬模板 我已经创建了一个JSFIDLE,其中有一个示例,我希望能够清楚地说明我要寻找的内容: 最好的方法是什么?我创建了一个模板,模板名称与我的把手模板匹配。然后在一个余烬初始化器中实例化它 Ember.Application.initializer({ nam

我正在将Ember.js添加到现有的rails应用程序中,并在创建
Ember.application
时使用
rootElement
选项

在这个
rootElement
之外有几个地方,我想插入一个绑定到简单
ember.Object
模型的小余烬模板

我已经创建了一个JSFIDLE,其中有一个示例,我希望能够清楚地说明我要寻找的内容:

最好的方法是什么?

我创建了一个模板,模板名称与我的把手模板匹配。然后在一个余烬初始化器中实例化它

Ember.Application.initializer({
  name: "clock_view",
  initialize: function(container, application) {
    var view = App.ClockView.create();
    view.replaceIn('#now');
  }
});
请参阅JSFIDLE上的完整示例:

我不会接受我自己的答案,只是看看是否有其他人有更好的方法来做到这一点

更新:下面是另一种可能的解决方案:

TL;博士:

App.ApplicationRoute = Ember.Route.extend({
    setupController: function(controller, model) {
        this.setupClock();
        this._super(controller, model);
    },
    setupClock: function() {
        var view = App.ClockView.create();
        view.replaceIn('#now');
    }
});

要防止
弃用:不再支持使用defaultContainer
消息,您必须在ApplicationView#didInsertElement中创建一个子视图

App.ApplicationView = Ember.View.extend({
    didInsertElement: function() {
        var view = this.createChildView(App.ClockView);
        view.replaceIn('#now');
    }
});

App.ClockView#控制器现在也将成为App.ApplicationController。

这似乎是一个相当好的解决方案!非常干净。唯一的缺点是,用于放置视图的代码不在您的“正常”位置,其他开发人员将在该位置搜索它。@JordyLangen谢谢!是的,我同意。这似乎只比在
Ember.Application.create({ready:…
)中使用与视图相关的代码稍微好一点。可能在
ApplicationRouter
ApplicationController
中有一个钩子会更好?弃用:不再支持使用defaultContainer。[defaultContainer\lookup].您应该检查此项,以便在上次余烬中顺利完成此项工作