ExtJS 4 - Json Writer没有像Json Reader那样的Record配置

时间:2013-01-04 10:21:03

标签: json cakephp extjs extjs4 cakephp-2.1

好吧,伙计们,工作的ExtJS4和我几乎完全相反的问题是这个人做的:
How do I get an ExtJS JsonStore to put the JSON data directly into the request body?

在我的应用程序中,我有一个嵌套的数据结构加载了相关的模型。

后端的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

2 个答案:

答案 0 :(得分:1)

modelName:null的东西看起来好像你已经有了一些自定义代码。为了只获取命名对象中的数据,Writer在ExtJS中有一个属性“root”,在Sencha Touch中有一个“rootProperty”,这可能会有所帮助。

还有一个框架可以为您完成所有这些编组,请参阅banchaproject.org 它的成本有点类似于ExtJS,但它会为你做很多这方面的工作。

答案 1 :(得分:0)

如果我需要自定义Writer发送请求的格式,我只是创建了自己的自定义编写器(扩展Ext.data.writer.Json),并覆盖了writeRecords()方法无论我需要什么逻辑来正确格式化请求。