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'
        }
    }
}
});

アプリケーションのどこかで、次のような 1 つのレコードを取得しようとしました。

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()構成されたプロキシ経由でストアにデータをロードします。これは、Proxy を使用して、Proxy が使用するストレージ バックエンドに非同期呼び出しを行い、取得したインスタンスを Store に自動的に追加し、必要に応じてオプションのコールバックを呼び出します。ただし、このメソッドは、データがフェッチされる前に戻ります。したがって、コールバック関数は、ストア内の新しいデータを操作するロジックを実行します。試す、

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