我发现了如何刷新树,一切正常。但现在我想专注于一个特定的节点,它总是说_itemNodesMap是未定义的。
这就是我所拥有的:
require([
"dojo/_base/window", "dojo/data/ItemFileWriteStore",
"dijit/tree/ForestStoreModel", "dijit/Tree",
"dojo/domReady!"
], function(win, Ifrs, ForestStoreModel, Tree){
dojo.extend(Tree, {
reload: function (data, path) {
this.dndController.selectNone();
this.model.store.clearOnClose = true;
this.model.store.close();
this._itemNodesMap = {};
this.rootNode.state = "UNCHECKED";
this.model.root.children = null;
this.rootNode.destroyRecursive();
var _data = {identifier: "id", label: "label", items: data};
var _store = new Ifrs({data:_data});
var _treeModel = new ForestStoreModel({
store: _store,
rootId:"root",
rootLabel:"Things",
childrenAttr:["children"]
});
this.model.constructor(_treeModel);
this.postMixInProperties();
this._load();
path.unshift("root");
this.set('path',path);
}});
聚焦我尝试添加以下内容并在设置路径后调用它:
scroll : function(path){
var itemnode = this._itemNodesMap[path[path.length-1]];
this.focusNode(itemnode[0]);
}
但我总是认为_itemNodesMap未定义。为什么?显示树,设置路径,除此之外的所有内容都有效。能得到一些帮助会很棒。谢谢!
答案 0 :(得分:0)
我认为设置路径是一个延迟过程,因此假设path
函数中的scroll
变量考虑了这一点,我将使用以下内容来关注您的树项(节点) )在then
函数中:
var item = myTree.path[path.length-1];
var nodes = myTree.getNodesByItem(item);
if (nodes && nodes.length > 0 && nodes[0]) {
nodes[0].domNode.scrollIntoView(true);
}
答案 1 :(得分:0)
如果你的错误是_itemNodesMap是未定义的,那么它不是_itemNodesMap的问题,而是你的'this'不是你认为它在滚动函数被调用的地方(可能是通过一个事件,可能使用'this'的全局对象。)
你应该尝试使用“dojo / _base / lang”和lang.hitch函数来确保你的'this'永远是原始对象。
require([
...
"dojo/_base/lang"
], function(..., lang){
...
scroll: lang.hitch(this, function(path){
var itemnode = this._itemNodesMap[path[path.length-1]];
this.focusNode(itemnode[0]);
})
....
});