0

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
4

1 に答える 1

1

ほとんどの場合、問題はストア ロードの非同期性によるものです。コードの記述方法によっては、autoLoad がオンになっていても、ストアがロードされる前にストア操作を実行しようとするのが早すぎる可能性があります。

最善の方法は、ストアにロード イベント リスナーを設定してから操作を実行することです。彼女は一例です:

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
        }
    }
});
于 2012-11-14T18:37:15.753 に答える