1

こんなお店があります。

Ext.define('app.store.System', {
extend : 'Ext.data.Store',
model : 'app.model.System',
autoLoad: true,
autoSync: true,

proxy: {
    type: 'rest',
    format: 'json',
    url: '/application/appinfo',
    method : "GET",
    reader: {
        type: 'json',
        root: 'System'
    },
    writer: {
        root: 'System',
        allowSingle: false
    }
}
});

そして、このメソッドで /application に一致するリクエストを処理するサービス エンドポイントがあります。

@GET
@Path("/{sysinfo}")
public List<SystemInfo> getSystemInfo() {        
    if(sysinfo == null){
        sysinfo = new SystemInfo();

        ...initialize
    }

    List<SystemInfo> resultList = new ArrayList<SystemInfo>();
    resultList.add(sysinfo);

    return resultList;
}

そしてそれはうまくいくように見えました... localhost:port/application/sysinfo.json に到達しようとしたとき、私はこれを得ました:

{ [{"address":"...","feeds":["feed1","feed2"] } ] }

これは正しいようですが、ビューの init メソッドでストアからデータを読み取ろうとすると:

var store = Ext.StoreManager.lookup('System');
    var data = [];

    store.each(function(record) {
        data.push(record.getData());
        console.log("record data: ");
        console.log(record.getData());
    });

    console.log(data[0]);

あたかも店が空だったかのように未定義であると言います。デバッガーで試してみたところ、ビューの initcomponent のに getSystemInfo() が呼び出されたことがわかりましたが、残念ながらその理由や解決方法がわかりません。何か案は?

御時間ありがとうございます。

4

2 に答える 2

1

最初にストアをロードしようとしましたか?

var store = Ext.StoreManager.lookup('System');
var data = [];
store.load({
   callback: function(storeVar, records, successful) {
      Ext.each(records, function(record) {
         data.push(record.getData());
         console.log("record data: ");
         console.log(record.getData());
      });
   }
   console.log(data[0]);
});

boris の言うことは本当です。返された JSON でルート プロパティを定義する必要があります。

chrome または firefox を使用している場合は、どのネットワーク呼び出しが行われたか、およびそれが返すもの (JSON データ...) を確認することもできます。

于 2012-11-21T15:09:17.710 に答える
1

これを試して:

return new { success: true, System = resultList};
于 2012-11-21T15:09:38.030 に答える