2014-07-01 44 views
0

每次打開對話窗口時,我都需要在對話窗口中添加不同數量的元素。這裏是我的代碼:CKEditor:每次加載對話框時添加元素

CKEDITOR.on('dialogDefinition', function(ev) { 
    var dialogName = ev.data.name; 
    var dialogDefinition = ev.data.definition; 

    if (dialogName == 'myCustomDialog') { 

     dialogDefinition.onShow = function() { 
      var dialogContents = this.definition.getContents('info'); 
      var genericElement = 
      { 
       type : 'text', 
       id : 'generic', 
       label : 'Some Label', 
      }; 

      var editorData = this.getParentEditor().getData(); 

      for (var i = 0; i < someFunction(editorData); i++) { 
       var newElement = genericElement; 
       newElement['id'] += '-' + (i + 1); // "generic-1", "generic-2", etc. 
       dialogContents.add(newElement); 
      }; 

      // console.log(this.definition.getContents('info')); 
     }; 
    } 
}); 

這是什麼並不重要someFunction做,只是添加的對話框元素的數量在打開的對話框窗口中的時間取決於編輯的數據的事實。

元素正被添加到對話框定義中,但是這些更改不會反映在對話窗口中。

如果我將dialogDefinition.onShow = function() {...}的代碼放在該函數之外(對變量定義進行小幅修改),則會添加這些元素,但只是第一次加載對話窗口。

任何提示?

回答

0

我最終將所有元素(知道有最多數量的元素,我想展示)添加到對話框定義的內容部分。裏面的onShow處理我通過元素循環相應地改變他們的CSS display財產,這樣

$(".cke_dialog_ui_vbox > table > tbody > tr:nth-child(" + i + ")") 
    .css('display', 'none'); 

.css('display', 'initial')透露priorly隱藏要素。

相關問題