2013-02-26 105 views
2

我在我的tinyMCE編輯器中使用了自定義的menubutton,它使用頁面上其他位置的特定HTML元素作爲菜單項。我使用jQuery選擇來獲得元素的列表,然後添加每一個作爲菜單項:TinyMCE中的動態菜單按鈕項

c.onRenderMenu.add(function(c,m) { 
    m.add({ title: 'Pick One:', 'class': 'mceMenuItemTitle' }).setDisabled(1); 
    $('span[data-menuitem]').each(function() { 
    var val = $(this).html(); 
    m.add({ 
     title: $(this).attr("data-menuitem"), 
     onclick: function() { tinyMCE.activeEditor.execCommand('mceInsertContent', false, val) } 
    }); 
    }); 
}); 

我的問題是,一旦按鈕時,第一個按下菜單第一次呈現這只是發生。當前頁面上的HTML元素會偶爾根據用戶的點擊和一些AJAX而改變,所以我需要在每次菜單渲染時運行這個選擇器代碼,以確保菜單完全是最新的。那可能嗎?

失敗了,是否有可能動態更新從我的AJAX調用的頁面結尾處的控件?我不確定如何訪問菜單項並更新它。使用tinyMCE.activeEditor.controlManager ...的東西?

謝謝!

回答

2

我發現了這個問題的解決方案,但我不確定它是最好的路徑。

它看起來並不像我可以讓tinyMCE重新呈現菜單,而是在我的AJAX調用結束時添加了一些代碼:更新DOM後,它手動更新tinymce下拉菜單。

菜單對象是可訪問的使用:

tinyMCE.activeEditor.controlManager.get('editor_mybutton_menu') 

其中則myButton是我的自定義控件的名稱。我的快速解決方案是在此菜單對象上調用removeAll()(以刪除所有當前菜單項),然後重新執行我的選擇器代碼以查找(新)DOM中的匹配元素並添加菜單項基於新的狀態返回。

它似乎工作得很好,雖然調整&想法總是歡迎!