2

私のjsonデータは次のようになります:

({"success": "true", "message" : "OK","data":[{"id_metric":"1","name_filter":"doc filter","type_guicomp":"combobox"},{"id_metric":"1","name_filter":"severity","type_guicomp":"combobox"}]})

"type_guicomp"のフィールド値を取得できるようにしたい"id_metric" = 1ので、結果は:"type_guicomp":"combobox"と。になり"type_guicomp":"combobox"ます。

"combobox"これを行うのは、変数に割り当てるための値が必要だからです。私は以下を含むいくつかのことを試しました:

myStore.load({
        scope: this,
        callback : function(record, operation, success) {
            console.log(record);
            console.log(record.data);
            }

と :

var index = Ext.StoreMgr.lookup("myStore").findExact('id_metric',1);
var rec = Ext.StoreMgr.lookup("myStore").getAt(index);
console.log(rec);

これらのソリューションは、未定義またはnullを返します。だから私がコールバックでこれをしたとき:

var i = myStore.getCount();
console.log(i);

戻ってき0ました。しかし、jsonの出力を確認すると、空ではなく、実際にデータが含まれています。

私は何が間違っているのですか?助けていただければ幸いです。

編集

私の店はこのように見えます:

Ext.define('Metrics.store.MyStore', {
extend: 'Ext.data.Store',
model: 'Metrics.model.MyModel',
autoLoad: true,
idProperty: 'id_metric',
proxy : {
    type : 'ajax',
    actionMethods : 'POST',
    node : 'id_metric',
    api : {
    read : 'gui_comp_items.php' //the php script that gets data from db
    },
    reader: {
        type: 'json',
        successProperty: 'success',
        messageProperty: 'message',
        root: 'data'
    }
}
});

私のモデル:

Ext.define('Metrics.model.MyModel', {
extend: 'Ext.data.Model',
fields: [
{name : 'id_metric', type : 'int'},
{name : 'name_filter', type : 'string'},
{name : 'type_guicomp', type : 'string'},
{name : 'value', type : 'string'}]  
});
4

3 に答える 3

1

私が得られないのは、あなたが使用した方法ですmyStore。文字列と変数の両方の方法で使用しました。それはどれですか?文字列の場合myStore.load()は機能しません。変数の場合は、の引用符を失う必要がありますExt.StoreMgr.lookup(myStore)。store 変数はどこで宣言されていますか?

于 2013-02-28T09:45:04.453 に答える
0

ajaxリクエストを使用している場合は、id_metricを取得できます...成功関数を見てください。

Ext.Ajax.request({
    url : 'blabla.tml',
    method:POST,                                                                      
    params : {
        item : Data
    },
    success : function(response) {
        var res = response.responseText;                                                                        
        alert(Ext.decode(res));
        var jsonData = Ext.decode(res);
        var data = jsonData.data; // here data will contain ur data with root data.      

ここにデータをロードできます

    Ext.getStore('Mystore').loadData(data);                                             
    }
});

そして、mystoreを使用してロードしています... MystoreのstoreId:mystoreです。一度見てください。

于 2013-03-01T11:51:26.520 に答える
0

同じ ID のオブジェクトが 2 つあるため、ストアが混乱している可能性があります。(JSON コードには "id_metric":"1" が 2 回表示されます)。

ただし、ほとんどの場合、モデルへの自動変換は失敗します。やってみてください:

var model = Ext.create("Metrics.model.MyModel", {"id_metric":"1","name_filter":"doc filter","type_guicomp":"combobox"});

モデルがどのように見えるか、インスタンスを作成できるかどうかを確認します。

それが機能する場合 (つまり、モデルを作成できる場合)、ストアをドリルダウンして、データが実際にそこにあるかどうかを確認します。これを探します:

myStore.proxy.reader.jsonData

また、コメントで指摘されているように、idProperty はモデル プロパティであるため、モデルで宣言する必要があります。

于 2013-07-08T08:40:34.030 に答える