【问题标题】:extjs 4 : get store record valuesextjs 4:获取存储记录值
【发布时间】:2013-02-13 14:39:21
【问题描述】:

我的 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"}]})

我希望能够检索 "id_metric" = 1"type_guicomp" 字段值,因此结果将是:"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);

这些解决方案返回 undefined 或 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'}]  
});

【问题讨论】:

  • 您的商店和模型配置是什么样的?
  • 我已将它们添加到我的帖子中。
  • 据我所知,idProperty 不是商店的属性,而是模型的属性,因此请考虑将其移至那里,这样您将返回两个具有相同值的 id_metric,因此它似乎不是唯一的。此外,您可以缩短代码 Ext.getStore('MyStore').findRecord('id_metric', 1)。如果没有任何错误,例如解码问题,请使用 firebug 等仔细检查响应。现在尝试在 load 的回调函数中转储数据,因为您可能会在它们被加载之前检索它们。

标签: json extjs extjs4 store


【解决方案1】:

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

【讨论】:

  • 我已经声明:var myStore = this.getMyStore();
  • 您是否使用 Ext.create 创建了商店和模型?据我了解,这些只是定义,您需要在定义后创建它们。
  • 我使用的是 Extjs 4 MVC 架构,存储和模型被定义然后由控制器使用。我不认为这是问题所在。
【解决方案2】:

如果您使用 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, 看一次就行了。

【讨论】:

    【解决方案3】:

    很可能是因为您有 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
    

    另外,正如 cmets 中所指出的,idProperty 是模型属性,您应该在模型中声明它。

    【讨论】:

      猜你喜欢
      • 2018-12-19
      • 2011-05-02
      • 2013-04-27
      • 2013-02-08
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多