我是Ember的新手,我想做的是用jQuery执行一些初始化:Ember.$("select").selectpicker();
来自定义默认选择(它实际上插入代表隐藏选择的div)。我以前在我的控制器中有这个代码:
init() {
this._super();
Ember.run.schedule("afterRender", this, function() {
this.send("initializeJQuery");
}
});
actions: {
initializeJQuery() {
Ember.$("select").selectpicker();
}
}
它确实初始化了我的选择标签,但当我转换到另一条路线并返回时 - 它会重新渲染,并且不想调用initializeJQuery方法,尽管运行方法(不是runOnce)。我使用Ember v1.13并且不推荐使用Views,因此我正在寻找替代方法来执行此操作。
希望得到你的帮助。
答案 0 :(得分:1)
init
只被调用一次,因为控制器是单例。通常这些东西放在didInsertElement
中,最好放在一个组件中。但为了向您展示正在发生的事情,请考虑以下事项:
App.IndexController = Ember.Controller.extend({
init: function(){
console.log("I get called once");
}
});
App.IndexView = Ember.View.extend({
didInsertElement: function(){
console.log("I get called every time Index is rendered");
}
});
JSBin:http://emberjs.jsbin.com/xacosekuku/edit?html,css,js,output
现在你真正想做的就是制作一个组件。例如,你可以这样做:
App.SelectPickerComponent = Ember.Component.extend({
tagName: 'select',
didInsertElement: function(){
this.$().selectpicker();
}
});
然后在你的模板中执行:
{{#select-picker}}
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
{{/select-picker}}
像这样(但添加了我们的jQuery调用):http://emberjs.jsbin.com/xacosekuku/2/edit?html,css,js,output