我正在使用基于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
中的编辑器绑定,但我不知道如何。
答案 0 :(得分:0)
由于我没有得到回复且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);
请注意,我没有使用多个编辑器对其进行测试,因为我的需求不需要,但如果您有多个具有相同回调的编辑器,则行为未定义。