如何在Dojo 1.4中为树节点设置自定义DOM ID?

时间:2010-05-24 09:59:43

标签: dojo

我使用Dojo 1.3编写了一个应用程序,其中我使用了Dijit Tree组件。 我正在使用商店中指定的JSON数据加载树,树库模型又使用它。

在1.3版本中,树元素直接从JSON数据中获取id。但是在1.4中,树元素有自己的id,类似于dijit_treenode_4。我在JSON中指定的id是唯一的,我无法理解为什么它们不再被使用了。

请帮助我了解此功能的更改方式以及如何覆盖自动ID生成。

提前致谢,

1 个答案:

答案 0 :(得分:0)

我认为这个设计决策是分离模型和视图的一个很好的改进。默认情况下,商店数据中的标识符确实不会对树节点的DOM元素ID产生任何影响。

当然,如果你想要这种行为,你可以实现它。定义自己的树节点类,覆盖DOM元素ID。

dojo.require('dijit.Tree');

dojo.declare('yourapp.TreeNode', [dijit._TreeNode], {
    // summary:
    //         Tree node with custom ID.
    postCreate: function(){
        // summary:
        //         Overrides the normal `postCreate()` method to set custom ID
        //         for node DOM element.
        this.inherited(arguments);
        var id = this.tree.model.store.getValue(this.item, 'id');
        this.domNode.id = id;
    }
});

然后继承dijit.Tree,并覆盖方法_createTreeNode()以创建自定义树节点。

dojo.declare('yourapp.Tree', [dijit.Tree], {
    _createTreeNode: function(args) {
        return new yourapp.TreeNode(args);
    }
});