0

ストアの作成に問題があり、助けが必要です。Ex.define アプローチを使用して作成されたストアがあり、問題なく動作します。コードは次のとおりです。

  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"
}

それで、私は何を間違っていますか?このエラー(バグ)を再現できますか?

4

5 に答える 5

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'
    }
});

多分これが役立つでしょう。

于 2012-10-11T09:51:21.857 に答える
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 
于 2012-10-11T10:34:31.067 に答える
1

何年も前の質問にぶつかって申し訳ありませんが、エラーTypeError: reader.read is not a functionを検索すると、このページは Google でかなり上位に表示されるので、お役に立てば幸いです。存在しないモデルにリンクされたストアが原因で、同じエラーが発生しました。タイプミスがないかモデル参照を確認してください。

于 2015-11-30T09:42:36.297 に答える
1

それは古い質問ですが、この問題は非常に一般的です。私のシナリオでは、モデルを定義していませんでした。「Ext.data.Model」でモデルを拡張するのを忘れていました。拡張後、適切に機能し始めました。

于 2016-05-27T07:10:53.003 に答える
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 is not equal to APP.model.web.bdetmcprovincia.BdetMcProvincia

これが助けになることを願っています。

于 2016-04-12T14:07:07.490 に答える