Что касается обновления списка TinyMCE, вы можете попробовать использовать tinymce.ui.NativeListBox
вместо стандартного tinymce.ui.ListBox
. Вы можете сделать это, установив последний аргумент от cm.createListBox
до tinymce.ui.NativeListBox
. Таким образом, у вас будет обычный старый <select>
, который вы можете обновить, как обычно.
Недостатком является то, что вам нужно вручную подключить свой собственный слушатель onchange, поскольку NativeListBox
поддерживает собственный список элементов внутри.
EDIT:
Я немного поиграл с этим прошлой ночью, и вот что я придумал.
Во-первых, вот как использовать собственный список и подключить наш собственный обработчик onChange способом TinyMCE:
// Create a NativeListBox so we can easily modify the contents of the list.
var mlb = cm.createListBox('mylistbox', {
title: 'Inserts'
}, tinymce.ui.NativeListBox);
// Set our own change handler.
mlb.onPostRender.add(function(t) {
tinymce.dom.Event.add(t.id, 'change', function(e) {
var v = e.target.options[e.target.selectedIndex].value;
tinyMCE.activeEditor.execCommand("mceInsertContent", false, v);
e.target.selectedIndex = 0;
});
});
Что касается обновления списка во время выполнения, ваша идея вызова действия контроллера для получения новых элементов является обоснованной; Я не знаком с ASP.NET, поэтому не могу вам помочь.
Идентификатор <select>
, который создает TinyMCE, принимает форму editorId _ controlId , где в вашем случае controlId равно "mylistbox". Firebug в Firefox - это самый простой способ найти идентификатор <select>
:)
Вот кнопка тестирования, которую я добавил на свою страницу, чтобы проверить, работает ли вышеуказанный код:
<script type="text/javascript">
function doFoo() {
// Change "myEditor" below to the ID of your TinyMCE instance.
var insertsElem = document.getElementById("myEditor_mylistbox");
insertsElem.options.length = 1; // Remove all but the first option.
var optElem = document.createElement("option");
optElem.value = "1";
optElem.text = "Foo";
insertsElem.add(optElem, null);
optElem = document.createElement("option");
optElem.value = "2";
optElem.text = "Bar";
insertsElem.add(optElem, null);
}
</script>
<button onclick="doFoo();">FOO</button>
Надеюсь, это поможет или, по крайней мере, поможет вам начать.