使用 hasMany 关联在 ExtJS 中填充存储

Posted

技术标签:

【中文标题】使用 hasMany 关联在 ExtJS 中填充存储【英文标题】:Populate store in ExtJS using hasMany associations 【发布时间】:2015-02-26 18:52:40 【问题描述】:

我试图在模型中一次填充所有记录,然后将每个集合属性分配给不同的容器。

即我的页面上有 1 个网格和 1 个组合,并在一次通话中同时尝试。所以我成功地获取了数据,但它以嵌套 JSON 数据的形式出现。

Ext.Model ('Person', 
  fields: [
     name: 'firstname' ,
     name: 'lastname' ,
     name: 'placesOfWork' 
  ],
  associations: [
     type: 'hasMany', model: 'PlaceOfWork', name: 'placesOfWork' 
);

这是我的模型类,每当我尝试将其分配给网格时,首先我必须遍历每个属性,然后在运行时创建一个新存储来分配数据。

首先我使用 store.reader.JsonData.placesOfWork 读取数据,它返回一个 jsonArray,然后使用数组元素创建一个存储。

问题不是这个,因为我在网格和组合中获取了我的数据。但是,每当我尝试获取我的网格并存储或组合值时,它总是返回 null 或存储大小“0”

var grid = Ext.getCmp("MyGRidID");
var store = grid.getStore();
alert(store.getCount());

当我的网格中有数据时,它返回 0。当我尝试从动态绑定的组合中获取价值时,也会发生类似的事情。

    var combo = Ext.getCmp("MyCombo");
    var value = combo.getValue();
    var rawValue = combo.getRawValue();

alert(value);
alert(rawValue);

返回 null 和空值。

【问题讨论】:

【参考方案1】:

您进行了不必要的额外手工工作。首先阅读 Ext 文档中的Loading Nested Data。然后,你应该有两个模型,它们之间的正确引用,你应该从服务器返回正确的 JSON 字符串。

那么就很简单了,您不需要手动创建和填充 many 存储,Ext 会为您完成。此外,Ext 创建 访问器函数 placesOfWork(),您可以调用它来获取对 many 存储的引用。

【讨论】:

以上是关于使用 hasMany 关联在 ExtJS 中填充存储的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS 5:自定义列排序

在 ExtJS4 TreeGrid 中加载嵌套的 JSON 数据

CakePHP - 在模型中查找没有 hasMany 关系的 hasMany 关联?

如何将 EXTJS 4.2.1 网格行按多个关系分组?

CakePHP:无法识别 hasMany 关联

Cakephp 3.x 保存 hasmany 关联