如何从nicEditor+emberjs中删除事件



我在一个基于Ember.js的平台上工作,在那里我使用nicEdit。这是我的代码

RichHTMLView = Ember.TextArea.extend({
    id: null,
    editor: null,
    didInsertElement: function(){
        var view = this;
        view.id = this.get("elementId");
        view.editor = new nicEditor({
                buttonList : ['bold','italic','underline','right','center','justify', 'link', 'ul', 'ol']
        }).panelInstance(view.id);
        //When the editor looses focus the content of the editor is passed to descr
        view.editor.addEvent('blur',function(){
            view.get('controller').set('descr',view.getViewContent());
        });
        //So the editor looks nice
        $('.nicEdit-panelContain').parent().width('100%');
        $('.nicEdit-panelContain').parent().next().width('100%');
    },
    getViewContent: function(){
        var view = this,
            inlineEditor = view.editor.instanceById(view.id);
        return inlineEditor.getContent();
    },
    willClearRender: function(){
        var view = this;
    }
});

因此,只要我在承载视图的页面上,这就可以很好地工作,但如果我转换到另一个路由,视图会有一些剩余部分,即编辑器被破坏,但我假设nicEdit会跟踪事件绑定,所以我最终会将blur事件绑定到编辑器,在新上下文中是undefined,因为视图不存在。

我的最佳猜测是,我需要以某种方式解除willClearRender中编辑器的绑定,但我不知道怎么做。

由于我没有得到回复,nicEdit被放弃,我对源代码进行了一些更改,通过将removeEvent添加到bkEvent:来处理这个问题

removeEvent: function(A, B){
if (B){
    this.eventList = this.eventList || {};
    this.eventList[A] = this.eventList[A] || [];
    this.eventList[A].splice(this.eventList[A].indexOf(B),1);
}

然后我可以删除willClearRender:中的事件

view.editor.removeEvent('blur',view.onBlur);

请注意,我没有用多个编辑器测试过它,因为我的需求并不需要,但如果有多个编辑器具有相同的回调,则不会定义行为。

相关内容

  • 没有找到相关文章

最新更新