Есть еще один способ передать аргументы CreateInstance через именованные параметры.
Исходя из этого, вы можете передать массив по направлению к CreateInstance
. Это позволит вам иметь 0 или несколько аргументов.
public T CreateInstance<T>(params object[] paramArray)
{
return (T)Activator.CreateInstance(typeof(T), args:paramArray);
}
Во-первых, поместите обработчик события onclick на само дерево, а не на элементы. Когда пользователь щелкнет по ячейке, из-за всплеска событий дерево поймает это событие, независимо от того, какая ячейка получила щелчок:
function clickedOnSomething(event) {
if(event.originalTarget.localName == "treechildren") {
//do something here based on who is event.originalTarget
}
}
Во-вторых, для динамического создания содержимого вы создаете пустое дерево в XUL:
<tree id="myTree" onclick="clickedOnSomething(event)" flex="1" seltype="single">
<treecols>
<treecol id="myCol" label="Stuff" primary="true" flex="1" />
</treecols>
<treechildren/>
</tree>
Затем в JavaScript вы создаете объект, реализующий интерфейс nsITreeView (см. ссылку ниже), и назначаете его в качестве представления дерева, созданного в XUL.
Этот объект будет служить интерфейсом для виджета Tree к данным и позволит дереву автоматически обновляться при изменении данных.
Более подробную информацию о пользовательских представлениях дерева вы можете найти здесь: https://developer.mozilla.org/en/XUL_Tutorial/Custom_Tree_Views