extjs 4:获取商店记录值

时间:2013-02-27 17:08:52

标签: json extjs extjs4 store

我的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"的{​​{1}}字段值,因此结果为:"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);
            }

这些解决方案返回undefined或null。 所以当我在回调中这样做时:

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

它返回var i = myStore.getCount(); console.log(i); 。但是当我检查json输出时,它不是空的,实际上有数据。

我做错了什么?请任何帮助将不胜感激。

编辑

我的商店看起来像这样:

0

我的模特:

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

3 个答案:

答案 0 :(得分:1)

我没有得到的是您使用myStore的方式。您已将它既作为字符串又作为变量使用。这是什么?如果是字符串,那么myStore.load()将无效。如果是变量,则需要丢失Ext.StoreMgr.lookup(myStore)上的引号。声明的商店变量在哪里?

答案 1 :(得分: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, 只看看一次。

答案 2 :(得分:0)

很可能是你通过拥有2个具有相同id的对象来混淆商店。 (您的JSON代码显示“id_metric”:“1”两次)。

然而,最有可能的是,自动转换为模型失败。 尝试做:

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

查看模型的外观以及是否能够创建实例。

如果可行(因此您可以创建模型),请在商店中向下钻取以查看数据是否确实在那里。 寻找这个:

myStore.proxy.reader.jsonData

另外,正如评论中指出的那样,idProperty是一个模型属性,你应该在你的模型中声明它。