Tree 在XUL中捕获可编辑的树更改
我有一个动态构建的可编辑XUL树。 问题是——人们应该如何倾听和捕捉变化的细胞 我通过捕获Tree 在XUL中捕获可编辑的树更改,tree,xul,capture,Tree,Xul,Capture,我有一个动态构建的可编辑XUL树。 问题是——人们应该如何倾听和捕捉变化的细胞 我通过捕获树的blur事件来检测编辑值的提交。inputField,任何其他事件都不起作用。 至少它是有效的,但是有没有一种简单的方法来获取新的价值呢 它真的应该像获取树元素、计算当前单元格并查询它的新值那样黑客吗?我猜“动态构造”意味着为树项动态生成DOM元素。然后,您应该能够在标记上注册DOMATRTMODIFED事件处理程序,并侦听树单元的标签属性的更改 然而,通常的方法是使树完全动态。您需要一个实现nsITr
树的blur
事件来检测编辑值的提交。inputField
,任何其他事件都不起作用。
至少它是有效的,但是有没有一种简单的方法来获取新的价值呢
它真的应该像获取树元素、计算当前单元格并查询它的新值那样黑客吗?我猜“动态构造”意味着为树项动态生成DOM元素。然后,您应该能够在
标记上注册DOMATRTMODIFED
事件处理程序,并侦听树单元的标签
属性的更改
然而,通常的方法是使树完全动态。您需要一个实现nsITreeView
(请参阅)的对象。您可以将该对象指定给树.view
属性。该对象定义了树有多少行,在哪个单元格中显示什么,行/列/单元格应该有什么属性,所有这些都在
中没有任何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;
@Wladimir这对我不起作用,首先我认为函数应该声明为
setCellText:function(行、列、值)
。但即使这样,它也不会对我开火。我在控制台中收到一个错误:{u安全错误:操作不安全。{u$('tree[editable=true]')。每个(function(){var oldView=this.view;var newView={uuuuu proto\uuuuu:oldView,setCellText:function(row,col,value){this.\uu proto\uuu.setCellText(row,col,value);警报(“为树单元更改的文本!”)};this.view=newView;})代码>对代码感到抱歉。但新视图未指定给树。我尝试将“testing:function()”添加到newView
中,但在控制台中它没有定义。@OmerSabic:我建议您创建一个新问题,在其中解释上下文,而不是在注释中询问一个超过一年的答案。@WladimirPalant Ok,在这里:)