在JQuery替换元素后重新绑定Ember View

时间:2014-05-04 19:30:08

标签: jquery ember.js

我有一个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");
  },
});

1 个答案:

答案 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
  }
});