[英]Ember.js pre4, how to do the previous pre2 connectOutlet stuff
在pre2中,假設我在路由器外部有這個應用程序代碼:
var controller = App.MyController.create();
controller.content = [...];
App.get('router').get('applicationController').connectOutlet({
outletName: 'modal',
controller: controller,
viewClass: App.MyView,
context: controller
});
也就是說,我用我的數據填充了一個名為'modal'的插座,添加到'application'模板中。
現在,在pre4中我沒有引用路由器創建的控制器。 你如何從路由器外部填充插座?
我可以要求路由器進行轉換,但我不想修改URL,因為我只是打開當前內容的模式。
編輯:
通過從App.Router.router對象中查找應用程序視圖,這就是我提出的臨時解決方案..顯然這是一個骯臟的黑客,任何人都知道在pre4中做到最好和正確的方法嗎?
var controller = App.MyController.create();
controller.content = this.get('content');
var theView = App.MyView.create();
theView.set('controller', controller);
App.Router.router.currentHandlerInfos[0].handler.router._activeViews.application[0].connectOutlet('modal', theView);
如果您只需要將視圖添加到應用程序中,則可以在此問題中使用我的解決方案:
但是如果你需要添加它也是一個插座,你可以通過向路由器發送一個事件並在事件中呈現它而不將其轉換到另一個路由來實現。
events: {
showModal: function(){
this.render('modal', {into: 'index', outlet: 'modalOutlet', controller = this.controllerFor('modal')});
}
}
請參閱小提琴示例:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.