Extjs 4 Ext.data.Model:如何为嵌套对象建模

Jer*_*naw 2 extjs

我是Extjs 4的新手,我试图了解如何为具有嵌套对象的数据创建模型。

示例数据:

{
  data1:{
      field1:1,
      field2:2,

      **objField1**:{
          objField1:1,
          objField2:2,

          **anotherObj**:{
             field1:1,
             field2:2,
             arrayofObjs:[
               {
                 //... 
               },
               //...
             ]
          }
      },

      objField2:{
          //... Some more fields or objects
      },

  data2:{
     //...
  }
}
Run Code Online (Sandbox Code Playgroud)

我试图了解如何对这些数据进行建模。领域很容易

Ext.define('MyModel', {
extend: 'Ext.data.Model',
fields: [
    {name: 'field1',  type: 'int'},
    {name: 'field2',   type: 'int'}
], //...
Run Code Online (Sandbox Code Playgroud)

但是如何建模对象?我当时以为可以为子对象和设置关联创建模型,但是在阅读了文档之后,它们似乎需要具有ID。因此,如果您查看belongsTo页面,则“所有者模型应具有引用关联模型主键的外键”。

我不是要对具有外键关系的数据进行建模,而只是对带有子对象的对象进行建模。因此,服务器可能会返回一个带有多个子对象的JSON对象,而我可能想要将其绑定到网格的那些对象之一,将另一个对象的数据绑定到一个选择框,等等。

谢谢!

Ale*_*rev 5

我认为您在这里遇到几个问题。

首先,Ext JS中的模型主要用于表示关系数据,即SQL数据库中的行。您可以扭曲他们做您想做的任何事情,但这并不意味着会很容易,并且始终存在“为什么做”的问题。

其次,Ext.data.Model根本不适合表示树状结构。您可以为此使用Ext.data.NodeInterface。NodeInterface是有点型号,在部分混合类重写,并且通常是相当缺憾和僵化的东西。好的一面是它可以工作,而不利的一面是没有其他类可以做同样的事情。

其次,嵌套的数据对象并不一定意味着它们实际上是相互关联的。您说过要从一个全局JSON响应中提取对象;通过使用不同的Reader配置多个商店并将它们提供给相同的JSON对象,可以轻松完成此操作。

OTOH,数据结构看起来有些混乱。这是在服务器端进行初步优化的尝试吗?即,将我们可能需要的所有内容都放入一个巨大的JSON中,以节省服务器点击次数?如果是这样,请看一下Ext.Direct远程处理;它可以使您免于日后的头痛。