ExtJS扩展组件,无法执行此操作.findById()

时间:2010-01-12 14:19:48

标签: extjs

我知道这可能是一个奇怪的问题,因为我无法通过id找到我自己的项目。请允许我解释一下我要做的事情......

这是可能的......

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”方法可以覆盖。不确定它会有所帮助。

如果我遗漏任何信息,请告诉我。

干杯谢谢你, 米奇

2 个答案:

答案 0 :(得分:1)

你在NewMenu.initComponent中有这个吗?

NewMenu.superclass.initComponent.call(this);

答案 1 :(得分: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元素。