2017-08-29 10 views
1

私は次のモデルを持っていて、私のアプリに保管しています。Extjs 4.1:Ext.data.Storeレコードは2番目のExt.data.Storeにロードされません。

私の問題は、レコードを2番目のストアにロードしようとしているときに問題になることです。私は別のストアメソッドと何も試していない(Store Manual)。

私のアプリでは、最初のストアレコードはAjaxコールがdata.products変数を受け取るコントローラーにロードされます。

私が間違っていることは何ですか?

PS:

autoLoad: true, 
autoSync: true 

ネジ全店舗アップとを呼び出す:私はExtJSの4.1

Fiddle sencha

どうやら

Ext.define('App.model.Product', { 
 
    extend: 'Ext.data.Model', 
 
    alias: 'model-product', 
 
    idgen: 'sequential', 
 
    fields: [ 
 
     { name: 'available', type: 'boolean', useNull: false, defaultValue: true }, 
 
     { name: 'country', type: 'int', useNull: false }, 
 
     { name: 'key', type: 'string', useNull: false }, 
 
     { name: 'name', type: 'string', useNull: false } 
 
    ], 
 
    proxy: { 
 
     type: 'memory', 
 
     reader: { 
 
      type: 'json', 
 
      root: 'products' 
 
     } 
 
    } 
 
}); 
 

 
Ext.define('App.store.Product', { 
 
    extend: 'Ext.data.Store', 
 
    autoLoad: true, 
 
    autoSync: true, 
 
    groupField: 'id', 
 
    countryFilter: function(countryId) { 
 
     this.clearFilter(); 
 
     this.filter('country', countryId); 
 
     return this; 
 
    }, 
 
    getRecordsForCountry: function (countryId) { 
 
     var records = []; 
 
     this.findBy(function (record) { 
 
      if (record.get('country') === countryId) { 
 
       records.push(record.copy()); 
 
      } 
 
     }); 
 
     return records; 
 
    }, 
 
    model: 'App.model.Product', 
 
    sorters: [ { 
 
     property: 'key', 
 
     direction: 'ASC' 
 
    } ], 
 
    sortOnLoad: true 
 
}); 
 

 
Ext.onReady(function() { 
 
    var data = { 
 
     products: [{ 
 
      country: 1, 
 
      key: 'test1', 
 
      name: 'Test1' 
 
     }, { 
 
      country: 2, 
 
      key: 'test2', 
 
      name: 'Test2' 
 
     }, { 
 
      country: 3, 
 
      key: 'test3', 
 
      name: 'Test3' 
 
     }] 
 
    }; 
 

 
    var store = Ext.create('App.store.Product'); 
 
    store.loadRawData(data, false); 
 
    
 
    var store2 = Ext.create('App.store.Product'), 
 
    records = store.getRecordsForCountry(1); 
 
    store2.add(records); 
 
    //tried also: 
 
    //store2.loadRecords(records); 
 
    //store2.loadData(records); 
 
    //store2.loadRawData(records); 
 

 
    var combobox = Ext.create('Ext.form.field.ComboBox', { 
 
     queryMode: 'local', 
 
     forceSelection: true, 
 
     displayField: 'name', // <-- Add this 
 
     valueField: 'key', 
 
     renderTo: Ext.getBody(), 
 
     store: store 
 
    }); 
 
    var combobox2 = Ext.create('Ext.form.field.ComboBox', { 
 
     queryMode: 'local', 
 
     forceSelection: true, 
 
     displayField: 'name', // <-- Add this 
 
     valueField: 'key', 
 
     renderTo: Ext.getBody(), 
 
     store: store2 
 
    }); 
 
});
<link href="http://docs.sencha.com/extjs/4.1.1/extjs-build/resources/css/ext-all.css" rel="stylesheet"/> 
 
<script src="http://cdn.sencha.com/ext/gpl/4.1.1/ext-all.js"></script>

答えて

1

これらの2つの設定使用しています空のレコード(トリガー:loadRawData,loadRecordsclearFilterfilter

これらの2つをfalseに設定すると、ロードは明示的にloadメソッドを呼び出すと発生します。

Ext.define('App.model.Product', { 
 
    extend: 'Ext.data.Model', 
 
    alias: 'model-product', 
 
    idgen: 'sequential', 
 
    fields: [ 
 
     { name: 'available', type: 'boolean', useNull: false, defaultValue: true }, 
 
     { name: 'country', type: 'int', useNull: false }, 
 
     { name: 'key', type: 'string', useNull: false }, 
 
     { name: 'name', type: 'string', useNull: false } 
 
    ], 
 
    proxy: { 
 
     type: 'memory', 
 
     reader: { 
 
      type: 'json', 
 
      root: 'products' 
 
     } 
 
    } 
 
}); 
 

 
Ext.define('App.store.Product', { 
 
    extend: 'Ext.data.Store', 
 
    autoLoad: false, 
 
    autoSync: false, 
 
    groupField: 'id', 
 
    countryFilter: function(countryId) { 
 
     this.clearFilter(); 
 
     this.filter('country', countryId); 
 
     return this; 
 
    }, 
 
    getRecordsForCountry: function (countryId) { 
 
     var records = []; 
 
     this.findBy(function (record) { 
 
      if (record.get('country') === countryId) { 
 
       records.push(record.copy()); 
 
      } 
 
     }); 
 
     return records; 
 
    }, 
 
    model: 'App.model.Product', 
 
    sorters: [ { 
 
     property: 'key', 
 
     direction: 'ASC' 
 
    } ], 
 
    sortOnLoad: true 
 
}); 
 

 
Ext.onReady(function() { 
 
    var data = { 
 
     products: [{ 
 
      country: 1, 
 
      key: 'test1', 
 
      name: 'Test1' 
 
     }, { 
 
      country: 2, 
 
      key: 'test2', 
 
      name: 'Test2' 
 
     }, { 
 
      country: 3, 
 
      key: 'test3', 
 
      name: 'Test3' 
 
     }] 
 
    }; 
 

 
    var store = Ext.create('App.store.Product'); 
 
    store.loadRawData(data, false); 
 
    
 
    var store2 = Ext.create('App.store.Product'), 
 
    records = store.getRecordsForCountry(1); 
 
    store2.add(records); 
 
    //tried also: 
 
    //store2.loadRecords(records); 
 
    //store2.loadData(records); 
 
    //store2.loadRawData(records); 
 

 
    var combobox = Ext.create('Ext.form.field.ComboBox', { 
 
     queryMode: 'local', 
 
     forceSelection: true, 
 
     displayField: 'name', // <-- Add this 
 
     valueField: 'key', 
 
     renderTo: Ext.getBody(), 
 
     store: store 
 
    }); 
 
    var combobox2 = Ext.create('Ext.form.field.ComboBox', { 
 
     queryMode: 'local', 
 
     forceSelection: true, 
 
     displayField: 'name', // <-- Add this 
 
     valueField: 'key', 
 
     renderTo: Ext.getBody(), 
 
     store: store2 
 
    }); 
 
});
<link href="http://docs.sencha.com/extjs/4.1.1/extjs-build/resources/css/ext-all.css" rel="stylesheet"/> 
 
<script src="http://cdn.sencha.com/ext/gpl/4.1.1/ext-all.js"></script>

関連する問題