1

如何检查我的应用程序模板中是否已连接插座?在 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) 但这实例化了一个新视图,而不是返回现有视图。

4

2 回答 2

0

感谢您的输入。这是我想出的解决方案:

1 -为我的单例视图创建视图注册表。视图注册表驻留在应用程序实例中,其属性由 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”是硬连线到我的应用程序视图的,但这是一个好的开始,对我有用。

于 2013-02-12T10:56:15.247 回答
0

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

看到这个问题

于 2013-02-11T17:35:45.857 回答