我必须创建一个工具栏,根据 ajax 请求计算其项目。看看函数 initComponent 和 buildItems,我没有得到相同的 Toolbar.items 元素结果,甚至 Ajax 请求的运行也如您在调用 console.log 后在 builsItems 方法中看到的那样正确完成。 请帮助(我是初学者,我正在使用 Extjs 4)非常感谢。
Ext.define('Dev.view.layout.Toolbarapp',{
extend:'Ext.toolbar.Toolbar',
alias :'widget.toolbarapp',
border:false,
height:35,
initComponent:function(){
this.items=[];
Ext.Ajax.disableCaching=false;
Ext.Ajax.request({
url : '/gdev/jsontest',
callback:this.buildItems,
scope:this
});
console.log(this.items); //THE RESULT IS []
this.callParent(arguments);
},
buildItems:function(options, sucess, response){
if (sucess==true) {
var listItems=[];
var applist=Ext.JSON.decode(response.responseText);
Ext.each(applist, function(rec){
listItems.push({'text' :rec.appid,
'iconCls' :rec.iconcls,
'operation':rec.appcode
}
);
});
this.items=listItems;
console.log(this.items); //THE RESULT IS [Object { text=100,
iconCls="appsysadmin", operation="appsysadmin"}, Object { text=101,
iconCls="appmailxe", operation="appmailxe"}]
}
else {
Ext.MessageBox.alert('Error','not found');
}
}
});
最佳答案
将对象表示法组件分配给 this.items 仅在 initComponent 中的 callParent 之前有效。
之后,这些项目已经初始化,ext 将不会接受对其的更改。您应该使用工具栏组件的 add method相反。
在 buildItems 方法中,只需使用对象符号组件调用 add 即可,而不是构建数组:
var me = this;
Ext.each(applist, function(rec){
me.add({'text' :rec.appid,
'iconCls' :rec.iconcls,
'operation':rec.appcode
}
);
});
我还没有测试过,但我很确定我就是这样做的(从我的头脑中)
编辑:添加范围变量
关于javascript - Extjs 4创建工具栏项目宽度ajax请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7746376/