ExtJS 4.1 - 改变 JsonStore 的值
Posted
技术标签:
【中文标题】ExtJS 4.1 - 改变 JsonStore 的值【英文标题】:ExtJS 4.1 - Changing value of JsonStore 【发布时间】:2012-11-03 03:37:58 【问题描述】:我使用 ExtJS 4.1。这是我的模型和商店:
Ext.define('MyModel',
extend: 'Ext.data.Model',
fields: ['status', 'data', 'data1', 'data2']
);
var store1 = Ext.create('Ext.data.JsonStore',
model: 'MyModel',
proxy:
type: 'ajax',
url : 'actionJsonServlet'
,
autoLoad: true
);
通过 Ajax 加载存储后,我想更改 JsonStore 的第一个“状态”(仅针对第一行)的值。 我尝试了下面的行,但它不起作用(第 2 行未定义记录):
var record = store1.getAt(0);
record.set("status", "Waiting");
我有这个错误:
Cannot call method 'set' of undefined
【问题讨论】:
你如何加载你的商店?你在on()
函数中创造了记录吗?
为了加载我的商店,我使用上面的代码(代理的 url)通过 Ajax 调用 Java servlet。我的 servlet 返回自动加载到我的商店中的 Json 数据。我不使用on()
功能。我必须用它来等待 Ajax 调用返回吗?
【参考方案1】:
您的问题很可能是由于商店加载的异步性质造成的。根据您的代码编写方式,您可能会在加载存储之前过早尝试执行存储操作,即使您已打开自动加载。
最好的方法是在 store 上设置一个加载事件监听器,然后执行你的操作。 她就是一个例子:
Ext.define('MyApp.store.Drafters',
extend:'Ext.data.Store',
model:'MyApp.model.User',
autoLoad:true,
proxy:
type:'ajax',
url:'user/drafters.json',
reader:
type:'json',
root:'data'
,
listeners:
load:function (store, recs)
store.insert(0, uid:'', name:''); //adding empty record to enable deselection of assignment
);
【讨论】:
好的,等待 Ajax 返回。在load
函数中,我没有使用insert
,而是尝试使用store.update(0, 'status':'Waiting');
来更新第一行的状态值,但它不起作用(或者后面的图表没有重新加载)。
你得到同样的错误吗?如果没有,那么您的原始问题和问题就解决了,您可以继续并找出图表未正确绑定到商店的原因。我建议为此创建一个特定的问题并提供相关的代码片段 - 图表设置和存储绑定。
我遇到了同样的错误。我终于找到了另一个解决方案来解决我的问题。我想显示我的饼图切片的其他标题,我在标签上工作以做我想做的事情。感谢您的宝贵时间。以上是关于ExtJS 4.1 - 改变 JsonStore 的值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ExtJS 访问从 JsonStore 获取的值?
如何在 ExtJS 3.4 中添加/合并多个 Ext.data.JsonStore