0

好的,伙计们,正在使用 ExtJS4,我遇到了这个人所做的几乎完全相反的问题:
如何让 ExtJS JsonStore 将 JSON 数据直接放入请求正文中?

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

后端的 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 代理的 Json Reader 有一个记录参数(请参阅此处)。不幸的是,Json Writer 没有这样的属性(甚至没有记录,因为我尝试设置它)。

目前我在后端的解决方法是:
$json = Set::insert($json, 'Model', $json);
但如果有更好的方法来实现这一点会很好。

更新: 为了进一步扩展,我正在加载一个加载嵌套 Json 数据的商店,该数据会自动填充客户端中的关联模型。(这一切都是用 Extjs 方法完成的,没有任何自定义代码)。

我已经在 J​​son 编写器中尝试了 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

4

2 回答 2

1

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

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

于 2013-01-06T02:23:27.697 回答
0

在我需要自定义 Writer 发送请求的格式的情况下,我只是创建了自己的自定义 writer(扩展 Ext.data.writer.Json),并用任何逻辑覆盖了 writeRecords() 方法我需要正确格式化请求。

于 2013-01-04T14:36:26.030 回答