2012-02-15 73 views
2

我想添加一个自定义的mymenubutton,菜单的项目是基于另一个下拉选定的值,它返回一堆json数组项。如何动态创建自定义控件

因此,我使用的例子http://fiddle.tinymce.com/gaaaab它可以创建mymenubutton的第一次,但当下拉列表更改,我应该如何重新初始化此控制并重新绑定到mymenubutton的json数组?

function generateTokensList(result) { 
     tinymce.create('tinymce.plugins.ExamplePlugin', { 
      createControl: function (n, cm) { 
       switch (n) { 
        case 'mysplitbutton': 
         var c = cm.createSplitButton('mysplitbutton', { 
          title: 'My split button', 
          image: 'some.gif', 
          onclick: function() { 
           alert('Button was clicked.'); 
          } 
         }); 

         c.onRenderMenu.add(function (c, m) { 
          m.add({ title: 'Tokens', 'class': 'mceMenuItemTitle' }).setDisabled(1); 

          var insertVar = function (val) { 
           return function() { tinyMCE.activeEditor.execCommand('mceInsertContent', false, val); } 
          }; 

          for (var i = 0; i < result.length; i++) { 
           var field = result[i].field; 
           var variable = insertVar(result[i].field); 
           m.add({ title: result[i].name, onclick: variable }); 
          } 
         }); 

         // Return the new splitbutton instance 
         return c; 
       } 

       return null; 
      } 
     }); 

     tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin); 
    } 
+0

另一个下拉菜单是tinymce用户界面按钮列表的一部分或该页面上的其他位置? – Thariama 2012-02-16 08:37:26

+0

用户是否在tinymce初始化之前选择了下拉菜单?或者编辑器处于活动状态时用户是否可能更改下拉菜单? – Thariama 2012-02-16 14:49:23

+0

当然我会为此努力! tinymce将首先基于默认下拉值填充,但之后用户可以更改下拉值,并且tinymce应该重新绑定UI按钮列表。 – Princa 2012-02-16 16:31:58

回答

3

自己解决了这个问题。将数据绑定到一个变量,每次只需调用var。

   c.onRenderMenu.add(function (c, m) { 
        m.add({ title: 'Tokens', 'class': 'mceMenuItemTitle' }).setDisabled(1); 
        var insertVar = function (val) { 
         return function() { tinyMCE.activeEditor.execCommand('mceInsertContent', false, val); } 
        }; 
        for (var i = 0; i < tokens.length; i++) { 
         var field = tokens[i].field; 
         var variable = insertVar('[['+tokens[i].name+']]'); 
         m.add({ title: '[['+tokens[i].name+']]', onclick: variable }); 
        } 
       });