在ExtJS中,如何通过更新两个表来处理主细节

时间:2014-02-10 17:23:27

标签: extjs extjs4.2

我正在尝试找到最佳解决方案的问题涉及主表(例如订单)和详细信息表(订单行)的标准方案。两者都在单独的表中。从服务器,我可以生成json嵌套数据和两个单独的实体。在我的客户端(ExtJS)方面,我需要使用模板显示嵌套数据,并且能够对订单和详细信息执行CRUD操作。

我有两个解决方案,我都不喜欢。我正在准备培训材料,希望为学生提供一个很好的解决方案,而不是一个充满危险的人。以下是我提出的两个。

情景1

  

使用associations标签创建两个模型和一个商店   (belongsTo和hasmany)。这非常适合查看数据,   然而,CRUD的CUD对我来说真是太悲惨了。也许我是   缺少一些东西,但似乎你必须实现自定义读者   并做了许多不自然的事情来使这项工作。

场景2

  

创建两个模型和两个商店。对细节实施过滤器   存储,以便当主表(网格)更改行选择时,   细节表(网格)被过滤。这使得创建嵌套   查看模板有点尴尬,因为你必须建立   json反对自己,但更大的问题是你必须加载   提前所有细节,并过滤每个主行上的细节   选择。或者,你可以做一个

其他ajax请求对每一行的更改都会导致客户端性能不佳。

我希望能够听到更好的解决方案或我的某个方案如何变得更好。

1 个答案:

答案 0 :(得分:3)

在我的应用程序中的类似问题中,我将使用您的方案1.您对此有什么问题?

我遇到的唯一问题是关联数据没有被发送到model.save上的服务器。解决方法是添加Json Writer覆盖。

Ext.define('SampleApp.config.CustomJsonWriter', {
    override: 'Ext.data.writer.Json',

    getRecordData: function (record) {
        var associatedData = record.getAssociatedData();

        record.associations.each(function (item, index) {
           var obj = {};
           obj[item.name] = associatedData[item.name];
           Ext.apply(record.data, obj);

        });

        return record.data;
    }
});

希望Sencha将在未来的ExtJS版本中包含一个包含关联数据的标志。但是你可以看到解决方法非常简单。