如何检查我的应用程序模板中是否已连接插座?在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)
但是这会实例化一个新视图而不是返回现有视图。
答案 0 :(得分:0)
使用Jquery
插件livequery
在元素插入dom时注册回调。这可以在视图中完成
答案 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”是硬连线到我的应用程序视图,但这是一个很好的开始,对我有用。