更改dojo树节点的值

时间:2012-04-02 12:38:21

标签: dojo

我正在尝试更改dojo树的值以显示正确的图标。我正在跳跃,我可以使用fetchItemByIdentity()获取对象并更改其中的值,但itemnull

    _target: null,
    _treeModel: null,

    constructor: function(target, uuid) {
        this._target = target;
        this._uuid = uuid;

        // from somewhere else the value get's changed
        topic.subscribe("questionChanged", lang.hitch(this, function(object, id) {
            var item = this._treeModel.fetchItemByIdentity({
                identifier: id,
                onItem: function(item, request) { alert("item " + item); }
              });
        }));
    },

    buildTree: function() {
        xhr.get({
            // The URL to request
            url: er.getAbsoluteUrl("/secure/staticquestion/tree?uuid=" + this._uuid),
            handleAs: "json",
            headers: {
                "Content-Type": "application/json; charset=utf-8"
            },
            preventCache: 'true',
            // The method that handles the request's successful result
            load: lang.hitch(this, function(response) {
                var rawdata = new Array();
                rawdata.push(response);
                var store = new ItemFileReadStore({
                    data: {
                        identifier: "uuid",
                        label: "name",
                        items: rawdata
                    }
                });
                this._loadtree(store);
            }),
            error: function(err, ioArgs) {
                errorDialog.show(err.message);
            }
        });
    },

    _loadtree: function(store) {
        this._treeModel = new TreeStoreModel({
            store: store,
            query: {
                name: 'root'
            },
            childrenAttrs: [ "children" ],
            mayHaveChildren: function(object) {
                return object.children.length > 0;
            }
        });

        var tree = new Tree({ // create a tree
            model: this._treeModel, // give it the model
            showRoot: false,
            getIconClass: function(/* dojo.data.Item */item, /* Boolean */opened) {
                if (!item || this.model.mayHaveChildren(item)) {
                    return opened ? "dijitFolderOpened" : "dijitFolderClosed";
                } else if (item.comment == 'false') {
                    return (item.answer == 'YES') ? "dijitLeafNoCommentYes"
                            : ((item.answer == 'NO') ? "dijitLeafNoCommentNo" : "dijitLeafNoComment");
                } else if (item.comment == 'true') {
                    return (item.answer == 'YES') ? "dijitLeafYes" : ((item.answer == 'NO') ? "dijitLeafNo"
                            : "dijitLeaf");
                }
                return "dijitLeaf";
            },
        }, this._target); // target HTML element's id
        tree.on("click", function(object) {
            topic.publish("staticQuestionSelected", object);
        }, true);
        tree.startup();
    }

我很高兴能得到帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我发现了我的问题:我需要使用ItemFileWriteStore,我可以用store.setValue(item, attribute, value)更改值。树后来更新了自己。