Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tree 在XUL中捕获可编辑的树更改_Tree_Xul_Capture - Fatal编程技术网

Tree 在XUL中捕获可编辑的树更改

Tree 在XUL中捕获可编辑的树更改,tree,xul,capture,Tree,Xul,Capture,我有一个动态构建的可编辑XUL树。 问题是——人们应该如何倾听和捕捉变化的细胞 我通过捕获树的blur事件来检测编辑值的提交。inputField,任何其他事件都不起作用。 至少它是有效的,但是有没有一种简单的方法来获取新的价值呢 它真的应该像获取树元素、计算当前单元格并查询它的新值那样黑客吗?我猜“动态构造”意味着为树项动态生成DOM元素。然后,您应该能够在标记上注册DOMATRTMODIFED事件处理程序,并侦听树单元的标签属性的更改 然而,通常的方法是使树完全动态。您需要一个实现nsITr

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

我通过捕获
树的
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,在这里:)