2012-12-19 41 views
2

還有就是我的選擇字段<select id="_photogalleries" multiple="multiple"></select>頁面textarea的(CKEDITOR)和一種形式。我希望RichCombo中的選項取決於選中的選項,其ID爲#_photogalleries。有什麼辦法可以動態重新生成RichCombo? 在此先感謝。如何在CKEDITOR中爲RichCombo動態生成選項?

CKEDITOR.plugins.add('style_plugin', { 
     requires: ['richcombo'], 
     init: function(editor) { 
      var pluginName = 'style_plugin'; 
      var config = editor.config, 
       lang = editor.lang.format; 

      editor.ui.addRichCombo('photogalleries', { 
       label: "Фоторепортаж", 
       title: "Фоторепортаж", 
       voiceLabel: "Фоторепортаж", 
       className: 'cke_format', 
       multiSelect: false, 
       icon: CKEDITOR.plugins.getPath('style_plugin') + 'photo-list-horizontal.png', 

       panel: { 
        css: [config.contentsCss, CKEDITOR.getUrl(editor.skinPath + 'editor.css')], 
        voiceLabel: lang.panelVoiceLabel 
       }, 

       init: function() { 
        this.startGroup("Фоторепортаж"); 
        var list=this; 
        $("#_photogalleries option:selected").each(function(index, value){ 
         console.log(index, value); 
         list.add("#HORIZONTAL_GALLERY_"+ $(value).val()+"#", "(Г) " + $(value).text(), "(Г) " + $(value).text()); 
         list.add("#VERTICAL_GALLERY_"+ $(value).val()+"#", "(В) " + $(value).text(), "(В) " + $(value).text()); 
        }); 
       }, 

       onClick: function (value) { 
        editor.focus(); 
        editor.fire('saveSnapshot'); 
        editor.insertHtml(value); 
        editor.fire('saveSnapshot'); 
       } 
      }); 
     } 
}); 

回答

5

這對我有用,你不必保留一個全局變量。

CKEDITOR.plugins.add('systemdata', { 
     init: function (editor) { 

      var fnData = editor.config.fnData; 

      if (!fnData || typeof (fnData) != 'function') 
       throw "You must provide a function to retrieve the list data."; 

      editor.ui.addRichCombo('systemDataCmb', 
       { 
        allowedContent: 'abbr[title]', 
        label: "System Data", 
        title: "System Data", 
        multiSelect: false, 
        init: function() { 

         var self = this; 

         var content = fnData(); 

         $.each(content, function(index, value) { 
          // value, html, text 
          self.add(value.name, value.name, value.name) 
         }); 
        } 
} 

然後設置函數來獲取數據放在這個地方,你設置的CKEditor的

CKEDITOR.replaceAll(function(element, config) { 
          config.startupFocus = true; 
          config.fnData = function() { 

           var returnData = null; 

           $.ajax({ 
            url: "/GetData", 
            async: false, 
            data: { id: 1 }, 
           }).done(function(result) { returnData= result; }); 

           return returnData; 
          }; 
         }); 

它假定你帶回那個有具有價值屬性的項目數組的JSON響應,但可以輕鬆更改。

+0

感謝您的回答! – vero4ka

+0

這非常酷;它是[strInsert](http://ckeditor.com/addon/strinsert)應該是的開始。 – Campbeln

0

我想我找到了適合我的解決方案。它是將一個列表對象保留在全局變量中,然後在外部選擇中觸發onchange事件時對其進行修改。

0

我解決了這個麻煩一行:

YOURCOMBO.createPanel(editor); 

例如:

var comboTeam = editor.ui.get("team"); 

comboTeam.createPanel(editor);//This is important, if not, doesnt works 

現在,您可以將項目添加到組合

comboTeam.add("name","name","name"); 

comboTeam.add("name2","name2","name2"); 

comboTeam.add("name3","name3","name3"); 
相關問題