我有一个引导下拉列表,我需要在它插入DOM后激活它。视图/控制器与路径无关:它只是我导航栏的一个组件。我在控制器中配置元素id:
App.DropdownController = Ember.ObjectController.extend({
elId : 'my-element-id',
});
这样我就可以在模板中使用它了:
<a class="dropdown-toggle opener" {{bind-attr id="elId"}} data-toggle="dropdown">
<i class="icon-off icon-2x"></i>
</a>
...
但在didInsertElement
我必须破解我的方式来获得控制器:
App.DropdownView = Ember.View.extend({
templateName: 'navbar/dropdown',
didInsertElement: function() {
var controller = App.__container__.lookup('controller:dropdown'); // TODO: how to properly get controller?
var elId = controller.get('elId');
$('#' + elId).dropdown();
}
});
如何在视图中正确访问控制器?
答案 0 :(得分:2)
您可以使用视图的controller
property来访问控制器。使用此属性,您可以在didInsertElement
处理程序中访问它。
var controller = this.get('controller');
答案 1 :(得分:0)
您可以使用this.get('controller')
,但一般情况下,最好不要直接访问控制器。我倾向于推送它们或创建依赖项。要以标记的方式设置它们,视图定义它的依赖关系并将它们传入,而不是拉出。
{{view elId=eldId}}
另一种选择是创建派生属性。
App.DropdownView = Ember.View.extend({
elId: function () { return this.get('controller.elid') }.property('controller.elid');
didInsertElement: function() {
$('#' + this.get('elId')).dropdown();
}
});
该选项看起来类似于pull,但具有衍生属性,从需要的位置删除了属性来自何处的知识。