2012-10-11 211 views
0

我在創建商店時遇到問題,需要一些幫助。 我有一個商店,使用Ex.define方法創建,它工作得很好。 下面是代碼:現在Extjs創建商店

Ext.define('path.to.myStore', { 
     extend: 'Ext.data.Store', 
     model: 'arm4.dict.m.DictBaseModel', 
     proxy: { 
      type: 'ajax', 
      url: 'data/module-dict/PossessionGroundWs/find', 

      reader: { 
       type: 'json', 
       root: 'dataList' 
      } 
     } 
    }); 

//later 
//works fine! 
var s =Ext.create('path.to.myStore'); 
s.load(); 

,問題是我要動態地創建存儲,而無需Ex.define。 這是我要做的事:

var s = Ext.create('Ext.data.Store', { 
    model: 'arm4.dict.m.DictBaseModel', 
    proxy: { 
     type: 'ajax', 
     url: 'data/module-dict/PossessionGroundWs/find', 

     reader: { 
      type: 'json', 
      root: 'dataList' 
     } 
    } 
}); 

s.load(); 

正如你所看到的,它使用完全相同的配置,但這不起作用。 我得到這個錯誤:

TypeError: reader.read is not a function  
result = reader.read(me.extractResponseData(response)); 

當我鑽進去ExtJS的代碼,我可以看到,讀者是不是由於某種原因初始化。

「讀者」 是這樣的:

{ 
    applyDefaults:true 
    root:"dataList" 
    type:"json" 
} 

那麼,我究竟做錯了什麼? 你能重現這個錯誤(bug)嗎?

回答

3

不能重現這個錯誤,但我記得有一天我擁有了它。嘗試定義你的讀者在一個單獨的文件中像這樣

Ext.define('My.reader.Default', { 
    extend: 'Ext.data.reader.Json', 
    alias: 'reader.myreader', 

    root: 'dataList' 
}); 

然後

Ext.create('Ext.data.Store', { 
    requires: ['My.reader.Default'], 
    model: 'arm4.dict.m.DictBaseModel', 
    proxy: { 
     type: 'ajax', 
     url: 'data/module-dict/PossessionGroundWs/find', 
     reader: 'myreader' 
    } 
}); 

也許這會有所幫助。

+0

我發現了這個問題。 Spasibo :) – mik

2

我發現了這個問題。 我真的不知道它是否是一個錯誤,但如果你用Ext.create(沒有Ext.define)創建你的商店,你必須在創建之前要求你的模型類。

所以,這工作得很好:

Ext.require('arm4.dict.m.DictBaseModel'); 
//...... 
var s = Ext.create('Ext.data.Store', { 
    model: 'arm4.dict.m.DictBaseModel', 
//store definition 
1

對不起,撞上一個歲的問題,但對於錯誤類型錯誤搜索時,該頁面在談到谷歌相當高:reader.read不是一個函數,所以我希望它可能有用。 我有同樣的錯誤,這是由一個商店鏈接到一個不存在的模型,所以請檢查您的模型參考爲任何錯字。

0

當我的模型定義錯誤時,我再現了同樣的錯誤。所以檢討一下。在我的情況:

Ext.define('APP.model.web.bdetmclocalidad.BdetMcProvincia', { 
    extend: 'Ext.data.Model', 
    idProperty : 'idProvincia', 
    fields: [ 
     {name:'codProvincia', type:"string", useNull:true} 
     ,{name:'descProvincia', type:"string", useNull:true} 
    ], 
    proxy : { 
     type : 'uxproxy', 
     localUrl : 'data/bdetMcProvinciasListado.json', 
     remoteUrl : 'bdetmcprovincia' 
    } 
}); 


Ext.define('APP.store.web.bdetmcprovincia.BdetMcProvinciaStore', { 
    extend : 'Ext.data.Store', 
    requires : 'APP.model.web.bdetmcprovincia.BdetMcProvincia', 
    model : 'APP.model.web.bdetmcprovincia.BdetMcProvincia', 
    filterOnLoad : false, 
    remoteSort : true, 
    pageSize  : 25, 
    proxy : { 
     type : 'uxproxy', 
     localUrl : 'data/bdetMcProvinciasListado.json', 
     remoteUrl : 'bdetmcprovincia' 
    } 
}); 

我就與包名(由複製粘貼&)錯誤: APP.model.web.bdetmclocalidad.BdetMcProvincia不等於APP.model.web.bdetmcprovincia.BdetMcProvincia

我希望這個幫助。

1

這是一個老問題,但這個問題很常見。 在我的場景中,我沒有定義模型,我忘了用'Ext.data.Model'擴展我的模型,擴展後它開始正常工作。