【问题标题】:Why isn't my ExtJS Store Association Working为什么我的 ExtJS 商店协会不起作用
【发布时间】:2012-11-07 14:11:45
【问题描述】:

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

问题:

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

有什么需要注意的怪癖?

【问题讨论】:

    标签: extjs associations


    【解决方案1】:

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

    ExtJS 中 HasMany 关联的规则

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

    [1] 商店将继承其模型的代理,您可以随时覆盖它
    [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() 函数 似乎没有设置实例。设置 object.belongsToInstance = obj if 调用 setter()。

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

    杂项

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

    【讨论】:

    • +1 for requires: [...],因为我惊讶地发现这是我的问题。真的很讨厌 ExtJs!
    猜你喜欢
    • 2017-11-19
    • 2020-05-25
    • 1970-01-01
    • 2016-02-28
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多