0

我创建了一个模型

Ext.define('MyApp.model.ContainerDetailsModel', {
extend: 'Ext.data.Model',
alias: 'model.ContainerDetailsModel',
config: {
    fields: [
        {
            name: 'id',
            allowNull: false,
            type: 'string'
        },
        {
            name: 'container_types_id',
            type: 'string'
        }
    ]
  }
});

和这样的商店

Ext.define('MyApp.store.ContainerDetailsStore', {
extend: 'Ext.data.Store',

requires: [
    'MyApp.model.ContainerDetailsModel'
],

config: {
    model: 'MyApp.model.ContainerDetailsModel',
    storeId: 'ContainerDetailsStore',
    proxy: {
        type: 'ajax',
        enablePagingParams: false,
        url: 'hereIsServiceUrl',
        reader: {
            type: 'json'
        }
    }
}
});

现在在应用程序的某个地方,我试图获得一条记录,例如:

var detailsStore = Ext.getStore("ContainerDetailsStore");
detailsStore.load();
var detailsRecord = detailsStore.last();

但它给了我不确定的。服务返回的 json 是可以的,它在不同的地方使用它作为列表的源。我已经尝试将 allowNull 更改为 true,但源中没有 null id。我尝试将类型设置为“int”,结果相同。

所以我试过了

console.log(detailsStore);

结果是这样的(只是重要的值):

Class {
...
loaded: true,
data: Class {
   ...
   all: Array[1] {
       length: 1,
       0: Class {
           container_types_id: "1",
           id: "726",
           ....
       }
   ...
   }
   ...
},
...
}

在同一个地方

 console.log(detailsStore.data);

返回(应该):

 Class {
   ...
   all: Array[1] {
       length: 1,
       0: Class {
           container_types_id: "1",
           id: "726",
           ....
       }
   ...
   }

但是(下一行)

console.log(detailsStore.data.all);

返回

 []

它是空数组。当我从商店尝试任何方法时,它说商店是空的。我一个接一个地写了console.log() 行——所以确保它们之间不会改变(我也以不同的顺序或组合尝试它)。

我的浏览器是 Google Chrome 23.0.1271.97 m 我使用来自https://extjs.cachefly.net/touch/sencha-touch-2.0.1.1/sencha-touch-all-debug.js的 Sencha

我怎样才能从那家商店拿唱片?

4

1 回答 1

2

store.load()通过配置的代理将数据加载到存储中。这使用代理对代理使用的任何存储后端进行异步调用,自动将检索到的实例添加到存储中,并在需要时调用可选的回调。但是,该方法在获取数据之前返回。因此回调函数,执行操作存储中的新数据的逻辑。尝试,

detailsStore.load({
    callback: function(records, operation, success) {
    var detailsRecord = detailsStore.last();
    },
    scope: this
});
于 2013-01-08T10:05:40.413 回答