Javascript Extjs 4创建工具栏项宽度ajax请求
我必须创建一个工具栏,用于根据ajax请求计算其项。看看initComponent和buildItems这两个函数,我并没有得到toolbar.items元素相同的结果,甚至在调用console.log后的buildItems方法中,ajax请求的运行也没有得到正确的执行。 请帮助(我是初学者,我正在使用ExtJS4)非常感谢Javascript Extjs 4创建工具栏项宽度ajax请求,javascript,extjs,extjs4,extjs-mvc,Javascript,Extjs,Extjs4,Extjs Mvc,我必须创建一个工具栏,用于根据ajax请求计算其项。看看initComponent和buildItems这两个函数,我并没有得到toolbar.items元素相同的结果,甚至在调用console.log后的buildItems方法中,ajax请求的运行也没有得到正确的执行。 请帮助(我是初学者,我正在使用ExtJS4)非常感谢 Ext.define('Dev.view.layout.Toolbarapp',{ extend:'Ext.toolbar.Toolbar', alias :
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');
}
}
});
您的第一个
console.log
调用在回调之外,因此它会在Ajax请求完成之前被调用
通过第二次
console.log
调用,它将在回调中被调用。。。它是在Ajax请求完成后启动的。基本上,如果希望使用从Ajax请求返回的数据,则需要在回调中完成所有工作。将对象表示法组件分配给该组件。items仅在initComponent中的callParent之前起作用
在此之后,项目已经初始化,ext将不会获取对其的更改。您应该使用工具栏组件的
在buildItems方法中,只需使用对象表示法组件调用add,而不是构建数组:
var me = this;
Ext.each(applist, function(rec){
me.add({'text' :rec.appid,
'iconCls' :rec.iconcls,
'operation':rec.appcode
}
);
});
我还没有测试过它,但我很确定我就是这样做的(从头开始)
编辑:为范围添加了me变量为什么不利用组件加载器?请参阅:这并没有真正回答问题,我这样做了,但我得到了一个错误:this.add不是一个函数。这是合乎逻辑的,因为这在每个范围内意味着范围发生了变化,所以我在Ext.each之前声明了一个变量,如下所示:var listitems=this,我将this.add替换为listitems.add。一切正常。非常感谢你,伙计。@ora-271071。是的,说得好。这是一个范围问题。这意味着每个回调中都有其他内容。extjs的方法通常是创建一个me变量并将其赋值,然后me在任何嵌套函数中都可用。我已经修改了代码。@ora-271071。您也应该接受其中一个答案(其中一个答案左侧的勾号),非常感谢您的参与。事实上,使用隐式ajax请求组件是一个很好的主意(将来我计划使用这个特性)。但现在,答案1对应我的需要,这正是我想要的。非常感谢你的回答。