在我的应用程序中,我有一个嵌套的数据结构加载了相关的模型。
后端的CakePHP期望(在伪代码中)保存中的以下格式:
[
{
[Model]
[Field1]: [Value1],
[Field2]: [Value2],
[Field3]: [Value3]
},
{
[Model]
[Field1]: [Value1],
[Field2]: [Value2],
[Field3]: [Value3]
}
]
这就是ExtJS当前发送到服务器的内容:
[
{
[Field1]: [Value1],
[Field2]: [Value2],
[Field3]: [Value3],
[Model] : null
}
]
因此,由于某种原因,它将模型包含为空值并将参数放在Json对象的根节点中。
服务器以类似的方式将数据发送到客户端,但Json Proxy的Json Reader具有记录参数(See here)。不幸的是,Json Writer没有这样的属性(甚至没有记录,因为我已经尝试过设置它)。
目前我在后端的解决方法是:
$json = Set::insert($json, 'Model', $json);
但如果有更好的方法来实现这一目标会很好。
更新 为了进一步扩展,我正在加载一个商店,它加载嵌套的Json数据,自动填充客户端中的相关模型。 (这都是使用没有任何自定义代码的Extjs方法完成的。)
我在Json编写器中尝试了root属性,但是对于批处理记录不可靠,它会像这样格式化请求:
{
[Root] : [
{
[Field1]: [Value1],
[Field2]: [Value2],
[Field3]: [Value3],
[Model] : null
},
{
[Field1]: [Value1],
[Field2]: [Value2],
[Field3]: [Value3],
[Model] : null
}
]
}
我也尝试过Bancha(http://banchaproject.org),但我无法与Sencha Architect(正在用于此项目)合作,而他们目前提供的解决方案是“解决方法” (我无法工作)。
谢谢你, -T6
答案 0 :(得分:1)
modelName:null的东西看起来好像你已经有了一些自定义代码。为了只获取命名对象中的数据,Writer在ExtJS中有一个属性“root”,在Sencha Touch中有一个“rootProperty”,这可能会有所帮助。
还有一个框架可以为您完成所有这些编组,请参阅banchaproject.org 它的成本有点类似于ExtJS,但它会为你做很多这方面的工作。
答案 1 :(得分:0)
如果我需要自定义Writer发送请求的格式,我只是创建了自己的自定义编写器(扩展Ext.data.writer.Json),并覆盖了writeRecords()方法无论我需要什么逻辑来正确格式化请求。