extjs 组合框 afterrender() 一起调用导致异步 ajax 调用
Posted
技术标签:
【中文标题】extjs 组合框 afterrender() 一起调用导致异步 ajax 调用【英文标题】:extjs combobox afterrender() called together leading to asynchronous ajax calls 【发布时间】:2016-09-27 06:02:17 【问题描述】:我正在使用 Java Spring 和 ExtJS 开发一个应用程序。前端包含一个面板,其中包含一些字段,包括 3 个组合框。为了填充组合框,我定义了一个在 ComboBox afterRender 上触发的函数。我为每个组合框都有一个商店(每个组合框都是从不同的表中填充的)。
问题是当页面被渲染时,函数被调用了 3 次但只填充了第 3 个组合框,或者返回的 JSON 字符串只包含最后一个组合框的值。实际上,所有 3 个组合框的请求都已发送,但只处理最后一个请求。
谁能告诉我如何处理这个问题?
这就是我挑战组合框的方式。
xtype: 'combobox',
x: 300,
y: 70,
store: 'TasksStr',
msgTarget: 'side',
displayField: 'label',
valueField: "value",
itemId: 'TaskRef',
fieldLabel: 'Task Ref',
name: 'taskRef'
//Similarly 2 more combo boxes for Project and Status
这是控制器:
init: function(application)
this.control(
"#TaskRef":
afterrender: this.onComboboxAfterRender,
select: this.onFormBlur
,
"#ProjectRef":
afterrender: this.onComboboxAfterRender,
select: this.onFormBlur
,
"#StatusRef":
afterrender: this.onComboboxAfterRender,
select: this.onFormBlur
);
这是商店:
Ext.define('MainApp.store.TasksStr',
extend: 'Ext.data.Store',
requires: [
'MainApp.model.Model'
],
constructor: function(cfg)
var me = this;
cfg = cfg || ;
me.callParent([Ext.apply(
storeId: 'TasksStr',
model: 'MainApp.model.Model',
proxy:
type: 'ajax',
url: 'http://localhost:8080/project/Tasks',
reader:
type: 'json',
root: 'data',
totalProperty: 'count'
, cfg)]);
);
这是java中的控制器:
@RequestMapping(value="/id")
public String getElanLUT(@PathVariable("id") String Id, ModelMap model )
System.out.println(Id);
try
ABCDao.set(Id);
List<ABC> List = Dao.getABC();
model.addAttribute("data", List);
model.addAttribute("success", true);
model.addAttribute("count", List.size());
catch(Exception e)
model.addAttribute("success", false);
e.printStackTrace();
return "jsonTemplate";
运行此代码时,java 控制台会打印所有 3 个 Id,但返回的值只是第 3 个。
提前致谢!
【问题讨论】:
几个问题,你说的函数被调用3次是指Controler#onComboboxAfterRender
吗?其他组合框如何调用(itemid),如果您只为TaskRef
添加了控制器,则该方法应该只被调用一次。您的控制器设置方式有问题。
TaskRef 只是 1 个组合框。我还有 2 个带有各自 itemid 的组合框。 afterRender() 被同时调用,但只有最后一个调用在后端处理。
但是如果你的控制器选择器只用于#TaskRef
,afterRender 怎么会被调用三次呢?
对不起,我没有提供控制器下的所有代码。实际上,我的机器中有 3 个控制器选择器。示例:1.Task,2.Project,3:Status。我已经更新了代码。
【参考方案1】:
您需要为所有 3 个组合框创建商店实例。
xtype: '组合框', ×:300, y: 70, 商店:Ext.create('MainApp.store.TasksStr'), msgTarget: '边', 显示字段:'标签', 值字段:“值”, itemId: 'TaskRef', fieldLabel:'任务参考', 名称:'taskRef'【讨论】:
谢谢。但我有他们的个人商店。以上是关于extjs 组合框 afterrender() 一起调用导致异步 ajax 调用的主要内容,如果未能解决你的问题,请参考以下文章