2010-01-12 59 views
0

我知道这可能是一个奇怪的问题,我无法通过id找到我自己的项目。请允许我解释什么,我试图做...ExtJS扩展组件,无法做到这一点.findById()

以下是可能的...

var myMenu = new Ext.menu.Menu({ 
    id: "my-menu", 
    items: [{ 
     id: "first-item", 
     text: "hello" 
    }] 
}); 

当我做到这一点...

myMenu.findById('first-item'); // it will return a component... 

然而,当我尝试以这种方式扩展它...

NewMenu = Ext.extend(Ext.menu.Menu, { 

    id: "", 
    win_id: "", 

    initComponent: function(){ 
     // All the neccessary code 
    }, 

    onRender: function(){ 
     // codes... 
    }, 

    // Override the add function 
    add: function(){ 
     this.findById(this.win_id); // return NULL 
    } 
}); 

对不起,我缺少的代码。我明白,它可能是对象在添加项目后未呈现的行,因此它将返回NULL。有什么办法可以做到吗?我使用ExtJS 3.0因此,没有“onAdd”方法来覆盖。不确定它会有帮助。

让我知道如果我错过任何impt信息。

欢呼和感谢一万, 米奇

回答

0

Ext.extend()should be an object第二个参数,而不是一个函数:

NewMenu = Ext.extend(Ext.menu.Menu, { 

    id: "", 
    win_id: "", 

    initComponent: function(){ 
     // All the neccessary code 
    }, 

    ... 

编辑:如果语法不是问题,那么我猜你是正确约为that the object has not render after it added the item。我认为这是一个重要的知识限制,即一个组件在底层DOM元素被插入并呈现在文档中之前并未完全初始化。

也许我可以建议一些东西,如果你想解释你想要做什么用this.findById(this.win_id)的返回值,就像延迟菜单项初始化,直到至少已经渲染了win_id元素。

+0

哎呀,是我不好......代码工作完全正常,如无差错在Firebug除了当我做添加动作,它this.findById的执行过程中返回null()。任何提示? – 2010-01-12 14:36:35

+0

实际上,我在.on('show',function(){/ * ... here ... * /})中使用“this.findById(this.win_id)”的返回值。稍后当窗口触发事件显示时将使用它。简而言之,在添加一个项目之后,我会附加一个监听器,这样当窗口触发时,它会回到添加的项目并对其进行操作。 – 2010-01-13 00:40:44

1

你在NewMenu.initComponent中有这个吗?

NewMenu.superclass.initComponent.call(this); 
+0

是的......我用另一种方法来处理它。谢谢。 – 2010-01-23 23:42:06