2012-11-14 61 views
1

我有一個CKEditor在Backbone View中的實例,它帶有一個插件,該插件將點擊編輯器中的任何文本發佈到我的站點。我想要點擊清除CKEditor,但是使用setData不起作用。它閃爍,好像東西正在發生,但隨後重置爲已存在的相同數據。CKEditor setData未清除或更改rte中的文本

這就是所謂的插件,像這裏面:

THIS是一個變量引用骨幹查看

CKEDITOR.plugins.add('post', { 
    init: function(editor) { 
     editor.addCommand('post', { 
      exec: function(editor) { 
       THIS.model.postMessageAttempt(editor.getData()); 
       THIS.options.data = ""; 
       editor.setData(""); 
      } 
     }); 
     editor.ui.addButton('Post', { 
      label: THIS.i18n.postText(), 
      command: 'post' 
     }); 

    } 
}); 

我也試圖與setData("some text")THIS.editor.setData("")(我有一個參考編輯器保存在視圖中)但都具有相同的結果。任何有關錯誤的想法?

編輯
我已經使用這個電話THIS.$el.find('textarea' + this.id).val(""); CKEditor的與jQuery的整合也試過,它不閃了,但它仍然無法清除的編輯器。

+0

所以,除了'setData(...)'沒有做任何事情之外,所有的工作都是正確的? –

+0

它是否工作,如果你'setData('

')'? –

+0

正確。那也行不通。 –

回答

2

問題是雙重的:首先,setData在函數的末尾調用一個函數afterSetData,該函數調用getDatagetData在功能開始時調用功能beforeGetData功能調用setData。我認爲我們的目標是解決這個事實,即有很多淺層參考而不是深參考,但即使在未縮小的ckeditor.js中,也不清楚爲什麼這樣做。

和第二,這還打電話disableEnablePost,爲了正確地使從編輯到網站/禁止發帖,在許多事件(重點,關鍵[下],等等)。 disableEnablePost調用getData,這導致我在post插件中致電setData時發生時間問題。

問題:

CKEDITOR.plugins.add('post', { 
    init: function(editor) { 
     editor.addCommand('post', { 
      exec: function(editor) { 
       THIS.model.postMessage(editor.getData()); 
       THIS.options.data = ""; 
       editor.setData(""); 
      } 
     }); 
     editor.ui.addButton('Post', { 
      label: THIS.i18n.postText(), 
      command: 'post' 
     }); 
     editor.on('key', function (event) { 
      THIS.disableEnablePost(editor.getCommand('post'), event); 
     }); 
    } 
}); 

這裏是我的解決

CKEDITOR.plugins.add('post', { 
    init: function(editor) { 
     editor.addCommand('post', { 
      exec: function(editor) { 
       THIS.model.postMessage(editor.getData()); 
      } 
     }); 
     ... 
    } 
}); 

model.postMessage現在觸發時,它已經完成了它夾在視圖中的事件,然後調用此函數:

clearRTE: function() { 
    this.editor.setData(""); 
    this.options.data = ""; 
} 

最後,我改變了disableEnablePost,這樣它每次都不會調用getData,這不是一個好習慣。現在,它叫editor.getSnapshot(),它更加輕巧,沒有數據處理,也沒有呼叫getDatasetData,所以對於頻繁使用更好。