我有一个动态构建的可编辑XUL树。 问题是 - 人们应该如何倾听和捕捉变化的细胞?
我通过捕获blur
的{{1}}事件来检测已修改值的提交,其他任何事件都无效。
至少它是有效的,但有一种简单的方法来检索新值吗?
它真的应该像获取Tree元素一样,计算当前单元格并查询其新值吗?
答案 0 :(得分:2)
我猜“动态构造”意味着您为树项动态生成DOM元素。然后,您应该能够在DOMAttrModified
标记上注册<treechildren>
事件处理程序,并侦听树状单元格的label
属性的更改。
然而,通常的方法是让树完全动态。您需要一个实现nsITreeView
的对象(请参阅https://developer.mozilla.org/En/NsITreeView)。您将该对象分配给tree.view
属性。该对象定义了树的行数,在哪个单元格中显示的内容,行/列/单元应具有的属性,以及<treechildren>
内没有任何DOM节点的所有属性。不幸的是,它是一个复杂的实现接口,特别是因为树的分层性质。如果你有一个清单,那么很多方法都会变得微不足道。
两种方法特别有趣。 isEditable()
允许您确定特定树单元格是否应该可编辑。只要编辑了一个单元格,就会调用setCellText()
。
如果您不想重新实现nsITreeView,还应该可以包装默认视图。像这样:
var oldView = tree.view;
var newView = {
__proto__: oldView,
setCellText(row, col, value)
{
oldView.setCellText(row, col, value);
alert("Text changed for a tree cell!");
}
};
tree.view = newView;