Ember Pre4:如何检查插座是否已连接?

时间:2013-02-11 16:56:40

标签: ember.js

如何检查我的应用程序模板中是否已连接插座?在renderTemplate()中,我想检查插座实际上是否需要连接(出于性能原因)。最终的代码应该与此类似:

renderTemplate: function(controller, model) {
    var isMyOutletConnected =  //how to do that?

    if(!isMyOutletConnected){
        this.render('someTemplate', {   // the template to render
          into: 'application',          // the template to render into
          outlet: 'someOutlet',       // the name of the outlet in that template
          controller: "someController"  // the controller to use for the template
        });
    }
}

我尝试使用容器通过以下方式查找应用程序视图:container.lookup("view:application) 但是这会实例化一个新视图而不是返回现有视图。

2 个答案:

答案 0 :(得分:0)

使用Jquery插件livequery在元素插入dom时注册回调。这可以在视图中完成

请参阅this question

答案 1 :(得分:0)

感谢您的投入。这是我提出的解决方案:

1 - 为我的单例视图创建视图注册表。查看注册表驻留在Application实例中,其属性由didInsertElement中的视图设置。

var App = Ember.Application.create({
    viewRegistry : {
        applicationView : null
    }
});

App.ApplicationView = Ember.View.extend({
    templateName : 'application',
    didInsertElement : function(){
        App.set("viewRegistry.applicationView", this);
    }
});

2 - 现在我可以访问此注册表以检查我的路线中的连接插座

isOutletOfApplicationViewConnected : function(outletName){
    var applicationView = App.viewRegistry.applicationView;
    if(applicationView){
        return applicationView.get("_outlets." + outletName) != undefined;
    }else{
        return false;
    }
},
renderTemplate: function(controller, model) {
    var isMyOutletConnected =  this.isOutletOfApplicationViewConnected("someOutlet");

    if(!isMyOutletConnected){
        this.render('someTemplate', {   // the template to render
          into: 'application',          // the template to render into
          outlet: 'someOutlet',       // the name of the outlet in that template
          controller: "someController"  // the controller to use for the template
        });
    }
}

这个解决方案可能更通用,因为方法“isOutletOfApplicationViewConnected”是硬连线到我的应用程序视图,但这是一个很好的开始,对我有用。