捕获XUL中的可编辑树更改

时间:2011-05-22 11:42:30

标签: tree xul capture

我有一个动态构建的可编辑XUL树。 问题是 - 人们应该如何倾听和捕捉变化的细胞?

我通过捕获blur的{​​{1}}事件来检测已修改值的提交,其他任何事件都无效。 至少它是有效的,但有一种简单的方法来检索新值吗?

它真的应该像获取Tree元素一样,计算当前单元格并查询其新值吗?

1 个答案:

答案 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;