2011-07-21 67 views
0

我想建立一個商店,將產生的形式,基於數據從服務器 如模型:ExtJS的存儲域操作

{success:true,data:[item1:{},item2{}...]} 

有沒有什麼方法可以讓我在寫的模式一家商店?

這是我大氣壓:

Ext.define('Tan.data.SimpleStore', { 
extend: 'Ext.data.Store', 
constructor: function (config) { //Not initComponent, thx for wasting an hour... 
    config=this.config||{}; 
    Ext.define('Users', { //ext base example model. 
     extend: 'Ext.data.Model', 
     fields: [ 
      {name: 'id', type: 'string'}, 
     ] 
    }); 
    config.proxy= { 
     type: 'ajax', 
     url : 'server.php?c=testFunction', 
     reader: { 
      type: 'json', 
      root: 'data' 
    }//Example return: {"success":true,"data":["0":1,"2":1,"3":1,"4":1]} 

    } 
    config.model='Users';//Store breaks without this :((
    this.callParent([config]); //Proto It 
    this.load({ // watch for the load event and then manipulate 
        // (or try to atleast) the fields 
     callback: function(records,operation,success){ 
// As expected obj is correct 
      var obj=Ext.decode(operation.response.responseText);  
//K now wtf. Have the data but.... 
      Ext.ModelManager.unregister(this.config.model); 

      Ext.define(this.config.model, { 
       extend: 'Ext.data.Model' 
       ,fields: Ext.Object.getKeys(obj.data) 
       ,url : 'server.php?c=testFunction' 
       ,reader: { 
        type: 'json', 
        root: 'data' 
       } 
      });//yay you over wrote the model, but meh, nothing 
      console.log(this); //Bleh 0 items in store.data 
     } 
    }); 
} 
}); 

var s= Ext.create('Tan.data.SimpleStore'); 
s.load(); 

看來,一個人必須有加載存儲時宣佈的典範,所以我只需要聲明一個CRUD之一,每一個打算在寫它。

理論上,我猜想它可能通過對ext.Ajax調用進行回調作爲構造函數來工作,但我試圖避免它。

回答

0

這太奇怪了。

this.add({key:'value}); 

註冊該字段。

Ext.define('Tan.data.SimpleStore', { 
extend: 'Ext.data.Store', 
constructor: function (config) { 
    config=this.config||{}; 
    Ext.define('Users', { 
     extend: 'Ext.data.Model', 
     fields: [ 
     ] 
    }); 
    config.proxy= { 
     type: 'ajax', 
     url : 'server.php', 
     reader: { 
      type: 'json', 
      root: 'users' 
    } 
    } 
    config.model='Users'; 
    this.callParent([config]); 
    this.load({ 
     callback: function(records,operation,success){ 
      var obj=Ext.decode(operation.response.responseText);  
      this.add({data:obj}) //this is the magic 
      console.log(this.getRange()); 
       console.log(this.max('data'));//yay it logs my array, looks like the handlers are in place 
     } 
    }); 
} 
}); 

var s= Ext.create('Tan.data.SimpleStore'); 
s.load(); 
-1

我已經在Sencha's forums提問類似的問題,但是我還沒有得到答覆。

對不起,我沒有給你一個直接的答案。

+0

我到目前爲止使用圖表的最佳結果是基於store onload事件重新創建整個對象。有點怪異,但它允許更多的可用性(例如動態最小/最大等)。改變圖形的配置(甚至改變商店和模型的範圍),不應該那麼痛苦。 – Alex

0

您可以定義自己的閱讀器或覆蓋Reader.read方法。

我已經解決了這個post中的類似問題。