我知道这可能是一个奇怪的问题,因为我无法通过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”方法可以覆盖。不确定它会有所帮助。
如果我遗漏任何信息,请告诉我。
干杯谢谢你, 米奇
答案 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
元素。