为什么我的ExtJS商店协会没有工作

时间:2012-11-19 15:58:20

标签: extjs associations

我遇到了问题。我想使用漂亮的ExtJS关联,但它们无法正常工作。

的问题:

  • 模型中没有关联
  • 加载后没有数据显示

需要注意的是什么怪癖?

1 个答案:

答案 0 :(得分:27)

我最近与ExtJS协会经历了非常痛苦的学习曲线,并且遇到了一些有用的文章,以及我自己的问题。以下是遇到同样痛苦的人的总结。

ExtJS中的HasMany关联规则

  • 除非您,否则请始终将您的代理商放入您的型号,而不是您的商店 有一个很好的理由不[1]
  • 如果,请始终要求您的孩子模特 在hasMany关系中使用它们。 [2]
  • 如果您想随意加载孩子,请始终使用foreignKey
  • 如果您在与父
  • 相同的回复中返回子项,请始终使用associationKey
  • 如果您愿意,可以同时使用foreignKey和associationKey
  • 始终为您的hasMany关系命名
  • 始终在hasMany关系中使用完全限定的模型名称
  • 考虑给读者提供一个有意义的名称(“数据”除外)
  • 子模型不需要belongsMo关系以使hasMany正常工作

[1]商店将继承其模型的代理,您可以随时覆盖它 [2]为了简化并避免潜在的循环引用,您可以在app.js

中要求它们

http://extjs-tutorials.blogspot.com/2012/05/extjs-hasmany-relationships-rules.html

ExtJS中HasOne和BelongsTo协会的规则

  • 将代理放入模型中,除非您有充分的理由不
  • 始终使用完全合格的型号名称
  • 始终设置getterName
  • 始终设置setterName
  • 如果在与此对象相同的响应中返回异物,则始终设置associationKey
  • 如果要随意加载外来对象
  • ,请始终设置foreignKey
  • 考虑将instanceName更改为更短的内容
  • 取决于是否加载了外来对象,getter的行为会有所不同 或不。如果已加载,则返回异物。除此以外, 你需要通过一个回调来获得它。
  • 如果您计划覆盖此关联,则应设置name属性。
  • hasMany无法使用belongsTo关系
  • 如果父模型的id字段不是“id”
  • ,请设置primaryKey属性
  • 有时您需要使用belongsTo关联的用途或要求。看 但是要循环引用。
  • 调用setter()函数 似乎没有设置实例。设置object.belongsToInstance = obj if 调用setter()。

http://extjs-tutorials.blogspot.com/2012/05/extjs-belongsto-association-rules.html

<强>其它

  • 如果您要将数据应用于网格,请确保使用新商店在网格上调用reconfigure()
  • 您的“foreignKey”属性 将作为本地过滤器应用于ExtJS商店;如果您看到通过网络加载的数据,但是 没有显示在您的网格中,请确保您的模型具有foreignKey 值定义为字段,或本地过滤器将排除数据 quiety。为了测试是否是这种情况,挂钩到商店的“负载” 事件并调用store.clearFilters(),并查看您的数据是否显示