ExtJS:带子的Vallid模型,不能使用HasOne,因为我没有关联ID?

时间:2015-09-07 13:03:40

标签: javascript json extjs extjs4 extjs5

这是一个有效的模型吗?我似乎没有工作?也许我必须使用HasOne,但问题是它有一个关联键而我的数据没有。

    {name:'name', type: 'string'},
    {name: 'desc', type: 'string', defaultValue: 'NA'},
    {name:'item', fields: [
        {name: 'name'},
        {name: 'desc'},
    ]}

在上面我使用名称Item和另一个字段数组。也许这不正确?以上是正确的语法吗?

如果我必须使用HasOne关联,似乎我需要提供关联密钥,但我的数据没有关联密钥。这是一个示例JSON记录。

{"name" : "test item",
"desc" : "my temporary desc"
"item" : [ 
          { "name" : "item 1", 
            "desc" : "item 1 desc" 
          } 
         ] 
 }

从上面可以看出,我有主要项目“测试项目”,它带有1个孩子,但孩子没有关联ID,即孩子到父母。没有干草ID,它只是一个json复杂的对象。

我真的很挣扎。有什么想法吗?

我使用的是休息代理,读者是'儿子'

有什么想法吗?

有点困惑。 HasOne听起来很理想,但我没有任何关系。

提前致谢

1 个答案:

答案 0 :(得分:1)

您不需要关联ID。实现你的愿望 你需要提供两种型号。一个用于父母,一个用于" hasone"儿童。您还需要指定"如何"在父模型中查找子/子的数据,如下所示:

 Ext.define('User', {
     extend: 'Ext.data.Model',
     fields: [{name:"fullName",type:"string"}],
     hasOne: [{name: 'address', model: 'Address', associationKey: 'address',getterName: 'getAddress',                          associatedName: 'address'}]
 }); 

Ext.define('Address', {
     extend: 'Ext.data.Model',
     fields: ['city','state']
});

assosciationKey非常重要,因为它告诉extjs在用户数据中找到Address模型数据的位置。使用getterName属性,您可以指定用于检索孩子的函数。

传递的数据需要看起来像这样:

store.loadRawData({"fullName":"Lucian","address":{"city":"Compton","state":"Ca"}});

看看我制作的这个小提琴: https://jsfiddle.net/1fjyrjn5/2/

也有一些参考资料帮助我解决了这个问题:

Extjs 5, data model association & load nested data

https://www.sencha.com/forum/showthread.php?237602-Ext.data.association.HasOne-getting-started-example

Extjs hasone association