我试图找到最佳解决方案的问题涉及主表(例如订单)和详细信息表(订单行)的标准方案.两者都在单独的表中.从服务器,我可以生成json嵌套数据和两个单独的实体.在我的客户端(ExtJS)方面,我需要使用模板显示嵌套数据,并且能够对订单和详细信息执行CRUD操作.
我有两个解决方案,我都不喜欢.我正在准备培训材料,希望为学生提供一个很好的解决方案,而不是一个充满危险的人.以下是我提出的两个问题.
场景1
使用associations标签(belongsTo和hasmany)创建两个模型和一个商店.这非常适合查看数据,但CRUD的CUD对我来说真的很悲惨.也许我错过了一些东西,但似乎你必须实现自定义读者并做许多不自然的事情来使这项工作.
情景2
创建两个模型和两个商店.在详细信息存储上实现过滤器,以便在主表(网格)更改行选择时,详细信息表(网格)将被过滤.这使得为模板创建嵌套视图有点尴尬,因为您必须自己构建json对象,但更大的问题是您必须提前加载所有细节并过滤每个主行选择上的细节.或者,你可以做一个
其他ajax请求在每一行更改,这使客户端不是非常高效.
我很想听到一个更好的解决方案或我的一个场景如何更好.
在我的应用程序中的类似问题中,我将采用您的场景 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;
}
});
Run Code Online (Sandbox Code Playgroud)
希望 Sencha 能够在未来的 ExtJS 版本中包含一个用于包含关联数据的标志。但正如您所看到的,解决方法非常简单。