我有一个Ember视图,可以在didInsertElement()
钩子中加载一个插件。该插件用它自己的元素替换视图元素。该元素保留了它的Ember id,但似乎失去了绑定的事件处理程序。
是否可以将View重新绑定到新元素以保留事件处理功能?
这就是我想要的:
App.MyView = App.AbstractView.extend({
tagName: 'canvas',
// plugin loading goes here because this.element
// does not yet exist in init(), and the plugin
// needs an id
didInsertElement: function() {
// load jquery plugin. this plugin replaces the root
// element of this view, leaving the id intact
loadPlugin(this.get('element').id);
var that = this;
// rebind click
$(this.get('element')).click(function(e){
that.click(e);
});
},
// doesn't work...
click: function(evt) {
alert("test");
},
});
答案 0 :(得分:2)
您尝试的可能是可能的,但最好将插件应用于视图的子元素。这将保留jQuery和Ember的分离,减少代码对任一框架的实现细节的依赖。
为了完成起见:
<强>模板:强>
<div class="replace-me"></div>
查看:强>
App.MyView = App.View.extend({
didInsertElement: function() {
// use handy local jQuery selector
this.$('.replace-me').myJQueryPlugin();
},
click: function(event) {
// smooth sailing as usual
}
});