2013-05-03 59 views
0

這是怎麼回事,我有一個列表,我工作得很好,如果我硬編碼數據使用商店的數據屬性,但是當我嘗試使用代理不顯示什麼...代理管理髮送數據&從服務器接收數據,但仍列表拒絕說明了什麼?Sencha2代理檢索數據,但列表不顯示

這是視圖:

Ext.define('MyApp.view.myListView', { 
extend: 'Ext.List', 
xtype: 'myListView', 
requires: ['MyApp.store.myListStore'], 
config: { 
    title: 'American Companies', 
    grouped: false, 
    itemTpl: '{company} {contact}', 
    store: 'myListStore', 
    onItemDisclosure: true 
}}); 

型號:

Ext.define('MyApp.model.myListModel', { 
    extend: 'Ext.data.Model', 
    config: { 
    fields: ['company', 'contact'] 
    } 
}); 

的商店:

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


    requires: ['MyApp.model.myListModel', 'MyApp.proxy.myListProxy'], 


    config: { 
     model: 'MyApp.model.myListModel', 
     proxy: 'searchProxy', 
     autoLoad: true, 
     grouper: { 
      groupFn: function (record) { 
       return record.get('contact').substr(0, 1); 
      } 
     } 
    } 
}); 

代理:

Ext.define('MyApp.proxy.myListProxy', { 
    extend: 'Ext.data.proxy.Ajax', 
    alias: 'proxy.searchProxy', 
    method: 'POST', 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
    }, 
    callbackKey: 'callback', 
    type: 'json', 
    config: { 
     model: 'MyApp.model.myListModel', 
     url: '/myUrl that works', 
     reader: { 
      type: 'json', 
      rootProperty: 'data' // E.g. {results: [{id: 123, description: 'some  text'}, {...}]}, 
     } 
    }, 
    read: function (operation, callback, scope) { 
      Ext.Ajax.request({ 
      url: '/myUrl that works', 
      //success: passFn, // function called on success 
      failure: failFn, 
      jsonData: { 
       "data": { 
        "fields": ["company", "contact"], 
       } 
      } 
     }); 

    }, 


    filterParam: undefined, 


    /** 
    * NOTE: so I can add other params as I needed the params for a search request 
    * You could use extraParams instead 
    */ 
    buildRequest: function(operation) { 
     var request = this.callParent(arguments); 
     var params = request.getParams(); 
//  var searchRequest = getSearchRequest(); // helper method 
//  if (searchRequest) { 
//   Ext.apply(params, searchRequest); 
//  } 
     return request; 
    } 


}); 


function failFn(msg) { 
    Ext.Msg.alert('Ajax Error', msg); 
} 
+0

你爲什麼要重寫代理中的'read'方法? – SachinGutte 2013-05-04 10:49:02

+0

事實上,這是它爲我工作的方式......沒有閱讀功能,我無法做到這一點,以及事實上沒有ajax請求..單獨的代理沒有發送任何數據,我是新來的這個哈哈 – martuanez 2013-05-05 13:48:37

+0

結帳回答下面。我自己嘗試過,並且工作。 :D – SachinGutte 2013-05-05 13:56:19

回答

2

更改read覆蓋到以下 -

read: function (operation, callback, scope) { 
    var that = this; 

    Ext.Ajax.request({ 
     url: 'yout_url_here', 
     success: function(response,request){ 
      var receivedData = Ext.JSON.decode(response.responseText.trim()); 

      operation.setResultSet(Ext.create('Ext.data.ResultSet', { 
       records: receivedData.data, 
       total : receivedData.data.length 
      })); 

      operation.setSuccessful(); 
      operation.setCompleted(); 

      if (typeof callback == "function") { 
       callback.call(scope || that, operation); 
      } 
     }, 
     failure: failFn, 
     jsonData: { 
      "data": { 
       "fields": ["company", "contact"] 
      } 
     } 
    }); 

}, 

爲每文檔閱讀方法 -

執行給定的讀取操作。如果您在自定義代理中覆蓋此方法,請記住在完成操作後始終調用所提供的回調方法。

因此您需要再次調用該回調。但只是稱它是不夠的。從服務收到的數據需要分配到Ext.data.Operation。所以一個新的ResultSet必須創建並分配數據。 這將允許商店將數據分配到列表。如果ResultSet未設置,則存儲將不會加載數據。

我試圖與下面的JSON和它的工作 -

{ 
    "data":[ 
     { 
     "company":"a", 
     "contact":"b" 
     }, 
     { 
     "company":"a", 
     "contact":"b" 
     }, 
     { 
     "company":"a", 
     "contact":"b" 
     }, 
     { 
     "company":"a", 
     "contact":"b" 
     } 
    ] 
} 

給這個一杆。但恕我直言,你不會需要重寫read方法。如果要在將其附加到列表之前處理收到的數據,則可能需要使用此方法。我不知道你是否想要這個。

但上面的解決方案爲我工作,也將爲你。 :)

+0

它就像一個魅力!非常感謝!然而,我仍然在讀者問題上撓頭,你能否如此友善地讓我知道沒有讀者會怎麼樣? – martuanez 2013-05-06 12:25:13

+0

很高興它幫助你。如果你只是刪除'讀'覆蓋,它應該工作。你已經在配置中爲rootProperty和數據類型提供了默認值。代理服務器就足夠了。我會盡量在業餘時間提供細節。 :D – SachinGutte 2013-05-06 12:41:12

+0

謝謝!我真的很想重構它,並學習正確的方法,你已經做了很多,所以再次感謝! – martuanez 2013-05-06 21:15:52

相關問題