10

我有问题。我想使用漂亮的 ExtJS 关联,但它们不能正常工作。

问题:

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

有哪些注意事项?

4

1 回答 1

28

我最近在 ExtJS 关联方面经历了一段非常痛苦的学习曲线,并且遇到了一些有用的文章,以及我自己的问题。这是为那些遇到同样痛苦的人提供的摘要。

ExtJS 中 HasMany 关联的规则

  • 始终将您的代理放在您的模型中,而不是您的商店中,除非您有充分的理由不 [1]
  • 如果在 hasMany 关系中使用它们,则始终需要您的子模型。[2]
  • 如果您想随意加载孩子,请始终使用 foreignKey
  • 如果您在与父级相同的响应中返回子级,请始终使用 associationKey
  • 如果您愿意,可以同时使用 foreignKey 和 associationKey
  • 始终命名您的 hasMany 关系
  • 始终在您的 hasMany 关系中使用完全限定的模型名称
  • 考虑给读者根一个有意义的名字(除了“数据”)
  • 子模型不需要为 hasMany 工作的 belongsTo 关系

[1] store 将继承其模型的代理,您可以随时覆盖它
[2] 为方便起见,并避免潜在的循环引用,您可以在 app.js 中使用它们

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

ExtJS 中 HasOne 和 BelongsTo 关联的规则

  • 将代理放入模型中,除非您有充分的理由不这样做
  • 始终使用完全限定的型号名称
  • 始终设置 getterName
  • 始终设置 setterName
  • 如果在与此对象相同的响应中返回外来对象,则始终设置关联键
  • 总是设置foreignKey,如果你想随意加载外物
  • 考虑将 instanceName 更改为更短的名称
  • 根据是否加载了外来对象,getter 的行为会有所不同。如果已加载,则返回外来对象。否则,你需要传入一个回调来获取它。
  • 如果您打算覆盖此关联,则应设置 name 属性。
  • 你不需要为 hasMany 工作的 belongsTo 关系
  • 如果父模型的 id 字段不是“id”,则设置 primaryKey 属性
  • 有时您需要对 belongsTo 关联使用 uses 或 requires 。不过要注意循环引用。
  • 调用 setter() 函数似乎没有设置实例。如果调用 setter(),则设置 object.belongsToInstance = obj。

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

杂项

  • 如果您将数据应用到网格,请确保使用新存储在网格上调用 reconfigure()
  • 您的“foreignKey”属性作为本地过滤器应用于 ExtJS 存储;如果您看到数据通过网络加载,但未显示在网格中,请确保您的模型将 foreignKey 值定义为字段,否则本地过滤器将排除数据安静。要测试是否是这种情况,请连接到商店的“加载”事件并调用 store.clearFilters(),然后查看您的数据是否显示
于 2012-11-19T16:07:16.430 回答