0

我不知道为什么会遇到麻烦,在下面这段代码this.treeStore的方法中引用类成员对象?checkAcceptance

代码片段(链接到正在运行的 jsfiddle 示例...):

dojo.declare("at.delta.util.FolderConfigurator", null, {
    treeStore: null,
    treeModel: null,
    tree: null,

    constructor: function (/*string*/ jsonData) {
        this.treeStore = new dojo.data.ItemFileWriteStore({
        data: jsonData
        });
        this.treeModel = new dijit.tree.ForestStoreModel({
           store: this.treeStore // this.treeStore available, perfect no problems
        });  
        this.tree = new dijit.Tree({
           model: this.treeModel,
           showRoot: false,
           betweenThreshold: 5,
           dndController: "dijit.tree.dndSource",
           checkAcceptance: function ( /*Object*/ source, /*Array*/ nodes) {
               // Here comes the code for drag acceptance
               var currentNode = dijit.getEnclosingWidget(nodes[0]).item;
               var parentNode = this.treeStore.getValue(currentNode, 'parent'); // typeError: this.treeStore is undefined
               return (parentNode && parentNode.owners !== undefined);
        }
    }, "pnlTree");
  }

});

尝试拖动树的节点会导致 firefox/firebug 控制台出现以下错误:

类型错误:this.treeStore 未定义

任何帮助将不胜感激 :)

4

2 回答 2

1

这是因为您的this指的是this.tree而不是 main 对象。用这个 -

dojo.declare("at.delta.util.FolderConfigurator", null, {
    树商店:空,
    树模型:空,
    树:空,

    构造函数: function (/*string*/ jsonData) {
        var _this = 这个;
        this.treeStore = new dojo.data.ItemFileWriteStore({
        数据:json数据
        });
        this.treeModel = new dijit.tree.ForestStoreModel({
           store: _this.treeStore // this.treeStore 可用,完美没问题
        });  
        this.tree = new dijit.Tree({
           模型:_this.treeModel,
           显示根:假,
           阈值之间:5,
           dndController: "dijit.tree.dndSource",
           checkAcceptance: function (/*Object*/ source, /*Array*/ nodes) {
               // 这里是拖拽接受的代码
               var currentNode = dijit.getEnclosureWidget(nodes[0]).item;
               var parentNode = _this.treeStore.getValue(currentNode, 'parent'); // typeError: this.treeStore 未定义
               return (parentNode && parentNode.owners !== undefined);
        }
    }, "pnlTree");
  }

});
于 2015-12-02T08:40:36.207 回答
1

问题是thischeckAcceptance 函数中的关键字的范围是dijit.Tree小部件而不是您自己的小部件。只需var self = this;在构造函数范围级别添加一个位置,然后在超出范围时使用 self 而不是 this 来引用。

于 2015-12-02T02:04:37.580 回答