首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么I rootNode.findChild返回null

为什么I rootNode.findChild返回null
EN

Stack Overflow用户
提问于 2014-05-20 20:57:03
回答 1查看 561关注 0票数 0

我有一个树形面板。Firebug显示我在根节点下有三个子节点。但是,当我在控制器中执行rootNode.findChild时,它总是返回null。我遗漏了什么?

这是我的控制器:

代码语言:javascript
复制
 Ext.define("GiipIq.controller.Problems", {
     extend: "Ext.app.Controller",
     refs: [{selector: '#problemsTree', ref: 'problemsTree'}],

     selectFirstProblem: function() {
         **var problemsTree = this.getProblemsTree();
         var rootNode = problemsTree.getStore().getRootNode();
         console.log(rootNode);  <== I can see three child nodes under root node in firebug
         var record = rootNode.findChild("id", "bit-manipulation", true);
         console.log(record);**
         //problemsTree.getSelectionModel().select(record); **<== select(index) does not work either**                                                                                                                                                                              
     },  

     init: function () {
         this.control({
             "#problemsTree": { afterrender: this.selectFirstProblem }
         }); 
     }   
 });

下面是Firebug的结果:

代码语言:javascript
复制
0
    Object { raw={...}, modified={...}, data={...}, more...}

1
    Object { raw={...}, modified={...}, data={...}, more...}

2
    Object { raw={...}, modified={...}, data={...}, more...}

以下是第一个示例的详细信息:

代码语言:javascript
复制
0
    Object { raw={...}, modified={...}, data={...}, more...}

$className
    "GiipIq.model.Problem"

$hasInheritableStatics
    Object { setProxy=true, getProxy=true, setFields=true, more...}

$inheritableStatics
    ["setProxy", "getProxy", "setFields", 2 more...]

_singleProp
    Object {}

alternateClassName
    "Ext.data.Record"

associations
    Object { allowFunctions=false, initialConfig={...}, items=[0], more...}

childNodes
    [Object { raw={...}, modified={...}, data={...}, more...}, Object { raw={...}, modified={...}, data={...}, more...}]

clientIdProperty
    null

config
    Object {}

configMap
    Object {}

data
    Object { id="algorithm", text="algorithms", leaf=false, more...}

这是我的观点:

代码语言:javascript
复制
Ext.define("GiipIq.view.Problem", {
    extend: "Ext.window.Window",
    alias: "widget.problemwindow",
    titleAlign: "center",
    closable: false,
    layout: "border",
    autoShow: true,
    maximizable: true,
    draggable: false,
    resizable: false,
    x: 0,
    y: 0,
    width: Ext.getBody().getViewSize().width/2,
    height: Ext.getBody().getViewSize().height/2,
    id: "problem-window",

    getEastPanel: function() {
        return {
            region: "west",
            xtype: "treepanel",
            title: "Problems",
            width: 200,
            split: true,
            collapsible: false,
            floatable: false,
            rootVisible: false,
            useArrows: true,
            store: Ext.create("GiipIq.store.Problems"), 
            id: "problemsTree",
            dockedItems: [{
                xtype: "toolbar",
                dock: "bottom",
                layout: "fit",
                items: [{ 
                    xtype: "button",
                    text: 'Click to Run Selected Problems',
                    id: "run-problems-button" 
                }]
            }],
            listeners: {
                checkchange: function(node, checkedStatus, options) {
                    console.log("vp");
                }
            }
        };
    },

    getCentralPanel: function() {
        return {
            xtype: "tabpanel",
            width: (Ext.getBody().getViewSize()/2) - 200,
            bodyBorder: false,

            items: [{
                title: "Problem Description",
                id: "problem-description-tab"
            },{
                xtype: "panel",
                title: "Source Code",
            },{ 
                xtype: "panel",
                title: "Big O Analysis",
            }]
        };
    },

    initComponent: function () {
        this.items = [
            this.getEastPanel(),
            this.getCentralPanel()
        ];
        this.callParent(arguments);
    }
});

下面是我的json数据:

代码语言:javascript
复制
{
    success: true,
    children: [{ 
        id: "algorithm",
        text: "algorithms", 
        expanded: true, 
        leaf: false, 
        checked: false, 
        children: [
            { id: "bit-manipulation", text: "bit manipulation", leaf: true, checked: true },
            { id: "brain-teaser", text: "brain teaser", leaf: true, checked: true }
        ]
    },{ 
        id: "data-structure",
        text: "data structures", 
        expanded: true, 
        checked: false, 
        leaf: false, 
        children: [
            { id: "array-and-string", text: "array and strings", leaf: true, checked: true },
            { id: "linked-list", text: "linked lists", leaf: true, checked: false}
        ] 
    },{ 
        id: "knowledge-based",
        text: "knowledge based", 
        expanded: true, 
        leaf: false, 
        checked: false, 
        children: [
            { text: "C and C++", leaf: true, checked: false},
            { text: "Java", leaf: true, checked: false}
        ]
    }]
}
EN

回答 1

Stack Overflow用户

发布于 2014-05-20 21:14:30

在你发布的代码中没有明显的问题,不管怎样,有一些提示:

  1. 如果树是异步加载的,那么当你试图找到它时,子对象可能不在那里。
  2. 你可以停止你的代码,进入findChild方法,看看那里发生了什么,以及为什么
  3. 返回null,你可以尝试从控制台调用findChild。如果它是从那里开始工作的,那么这是一个时间问题,所以你的代码太早了。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23760515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档