Json extjs4:获取存储记录值

Json extjs4:获取存储记录值,json,extjs,extjs4,store,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"}]}) Ext.define('Metrics.store.MyStore', { extend:

我的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"}]})
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.getStore('Mystore').loadData(data);                                             
    }
});
我希望能够检索
“id\u metric”=1
“type\u guicomp”
字段值,因此结果将是:
“type\u guicomp”:“combobox”
“type\u guicomp”:“combobox”

    Ext.getStore('Mystore').loadData(data);                                             
    }
});
我这样做是因为我需要值
“combobox”
将其分配给变量。 我尝试过几件事,包括:

myStore.load({
        scope: this,
        callback : function(record, operation, success) {
            console.log(record);
            console.log(record.data);
            }
    Ext.getStore('Mystore').loadData(data);                                             
    }
});
以及:

var index = Ext.StoreMgr.lookup("myStore").findExact('id_metric',1);
var rec = Ext.StoreMgr.lookup("myStore").getAt(index);
console.log(rec);
    Ext.getStore('Mystore').loadData(data);                                             
    }
});
这些解决方案返回undefined或null。 因此,当我在回调中执行此操作时:

var i = myStore.getCount();
console.log(i);
    Ext.getStore('Mystore').loadData(data);                                             
    }
});
它返回
0
。但是当我检查json输出时,它不是空的,而且里面实际上有数据

    Ext.getStore('Mystore').loadData(data);                                             
    }
});
我做错了什么?如果您有任何帮助,我们将不胜感激

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

    Ext.getStore('Mystore').loadData(data);                                             
    }
});
我的商店看起来像这样:

({"success": "true", "message" : "OK","data":[{"id_metric":"1","name_filter":"doc filter","type_guicomp":"combobox"},{"id_metric":"1","name_filter":"severity","type_guicomp":"combobox"}]})
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.getStore('Mystore').loadData(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'}]  
});
    Ext.getStore('Mystore').loadData(data);                                             
    }
});

我不明白的是你使用myStore的方式。您将它用作字符串和变量。是哪一个?如果是字符串,那么
myStore.load()
将无法工作。如果是变量,则需要在
Ext.StoreMgr.lookup(myStore)
上丢失引号。存储变量在哪里声明?

如果使用ajax请求,您可以获得id\u metric…只需查看success函数

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);                                             
    }
});
现在可以在这里加载数据了

    Ext.getStore('Mystore').loadData(data);                                             
    }
});
您正在使用mystore加载…是您的mystore的storeId:mystore,
只需看一眼就可以了。

很可能是因为有两个id相同的对象而混淆了存储。
    Ext.getStore('Mystore').loadData(data);                                             
    }
});
(您的JSON代码显示“id_metric”:“1”两次)

    Ext.getStore('Mystore').loadData(data);                                             
    }
});
但是,最有可能的是,自动转换到模型失败。 试着做:

    Ext.getStore('Mystore').loadData(data);                                             
    }
});
var model = Ext.create("Metrics.model.MyModel", {"id_metric":"1","name_filter":"doc filter","type_guicomp":"combobox"});
查看模型的外观以及是否能够创建实例

    Ext.getStore('Mystore').loadData(data);                                             
    }
});
如果这样做有效(这样您就可以创建一个模型),请在您的商店中深入查看数据是否确实存在。 看看这个:

    Ext.getStore('Mystore').loadData(data);                                             
    }
});
myStore.proxy.reader.jsonData

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

你的商店和模型配置看起来是什么样的?我已经把它们添加到我的帖子中。据我所知,IdHealt不是St店的属性,但是模型是考虑移动它的,并且你返回两个IDY度量值相同的值,所以它看起来并不是唯一的。此外,您还可以缩短代码
Ext.getStore('MyStore').findRecord('id\u metric',1)
。如果没有任何错误,如解码问题,请使用firebug或类似工具仔细检查响应。现在,请尝试在load的回调函数中转储数据,因为您可能会在加载数据之前检索它们是否使用Ext.create创建了商店和模型?根据我的理解,这些只是定义,一旦定义了它们,你就需要创建它们。我使用的是Extjs 4 MVC架构,存储和模型被定义,然后由控制器使用。我认为这不是问题所在。
    Ext.getStore('Mystore').loadData(data);                                             
    }
});