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 JsonStore 不加载

EXTJS 在异步获取后将 JSONStore 加载到网格

如何在 ExtJS 3.4 中添加/合并多个 Ext.data.JsonStore

使用 extjs 3.4 panel + dataview + jsonstore 检索数据

ExtJs JSONStore 输入数据格式