ExtJS 5:了解Ext.data.field.Field.reference配置属性

时间:2015-05-25 02:01:45

标签: extjs extjs5

我试图理解Ext.data.field.Field.reference配置的作用,因为名字有点尴尬。我想要做的是拥有如下数据:

[{
  name: 'Mulder',
  state: 'Virginia',
  friends: [{
    name: 'Scully',
    type: 'partner'
  }, {
    name: 'Smoking Man',
    type: 'dad'
  }]
}]

使用模型消化它,所以我创建它们:

Ext.define('Agent', {
  extend: 'Ext.data.Model',
  fields: ['name', 'state']
});
Ext.define('Relationship', {
  extend: 'Ext.data.Model',
  fields: ['name', 'type', {
    name: 'agentId',
    reference: {
      type: 'Agent',
      inverse: {
        role: 'friends'
      }
    }
  }]
});

我在关系模型中作为对象反转的原因是因为this thread ...基本上,我希望我的模型命名与检索到的数据不同,所以不是Friend模型,我希望它在数据中被称为Relationship和引用friends,但所有这些都没有记录。解决之后,我创建了我的商店(test Fiddle here):

Ext.create('Ext.data.Store', {
  model: 'Agent',
  autoLoad: true,
  proxy: {
    type: 'ajax',
    url: 'data3.json',
    reader: {
      type: 'json'
    }
  },
  listeners: {
    load: function(store) {
      // outputs friends as a function and getFriends as null
      console.log('Agent', store.first().friends, store.first().getFriends);
    }
  }
});

所以我想要做的就是让我的朋友的getter方法被称为getFriends而不是friends,但是从查看文档来看,我并不完全确定我使用哪个配置来指定它。我尝试过那些看起来像是候选者(关联,角色和逆向)的人。在这一点上,我很确定它是我在反向对象中设置的属性,但看到那些没有文档记录,我不会知道。

以前,在版本4中,我们有hasMany个关联,但这似乎被推到一边/没有文档代替reference方式。我们会通过将此添加到Agent模型来完成我尝试做的事情(请参阅Fiddle了解工作示例):

hasMany: [{
  model: 'RelationshipHasMany',
  associationKey: 'friends',
  name: 'getFriends'
}]

有没有人对如何命名我的吸气剂有任何见解?也许您还可以解释associationrole所做的属性。

1 个答案:

答案 0 :(得分:2)

您想使用getterName

inverse: {
    role: 'friends',
    getterName: 'getFriends'
}