【问题标题】:ExtJS 4.1 - Changing value of JsonStoreExtJS 4.1 - 改变 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 调用返回吗?

标签: extjs store javascript-framework extjs4.1


【解决方案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'}); 来更新第一行的状态值,但它不起作用(或者后面的图表没有重新加载)。
  • 你得到同样的错误吗?如果没有,那么您的原始问题和问题就解决了,您可以继续并找出图表未正确绑定到商店的原因。我建议为此创建一个特定的问题并提供相关的代码片段 - 图表设置和存储绑定。
  • 我遇到了同样的错误。我终于找到了另一个解决方案来解决我的问题。我想显示我的饼图切片的其他标题,我在标签上工作以做我想做的事情。感谢您的宝贵时间。
猜你喜欢
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 2020-07-03
  • 1970-01-01
  • 2012-09-22
  • 2011-11-11
  • 1970-01-01
相关资源
最近更新 更多