Почему не работает моя ассоциация магазина ExtJS

У меня проблемы. Я хочу использовать красивые ассоциации ExtJS, но они не работают должным образом.

Вопросы:

  • Отсутствие связи в модели
  • Отсутствие данных после загрузки

Каковы особенности присмотра?

Ответ 1

Недавно я прошел очень болезненную кривую обучения с ассоциациями ExtJS и наткнулся на некоторые полезные статьи, а также на свои собственные ошибки. Вот резюме для тех, кто сталкивается с такими же проблемами.

Правила для ассоциаций HasMany в ExtJS

  • Всегда размещайте свои прокси в своих моделях, а не в ваших магазинах, если только вы есть очень веская причина не в [1]
  • Всегда требуйте, чтобы ваши дочерние модели, если используя их в hasMany отношениях. [2]
  • Всегда используйте foreignKey, если вы хотите загрузить детей по желанию.
  • Всегда используйте connectionKey, если вы возвращаете дочерние элементы в том же ответе, что и родительский
  • Вы можете использовать как foreignKey, так и associationKey, если хотите
  • Всегда указывайте свои отношения hasMany
  • Всегда используйте полностью квалифицированные имена моделей в ваших отношениях hasMany.
  • Подумайте о том, чтобы дать читателю корень значимого имени (кроме "данных" ).
  • Для дочерней модели не требуется отношение toIt к hasMany для работы

[1] Магазин наследует свой прокси-сервер модели, и вы всегда можете его переопределить
[2] Чтобы облегчить задачу и избежать потенциальных круговых ссылок, вы можете потребовать их в app.js

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

Правила для HasOne и BelongsTo Ассоциации в ExtJS

  • Поместите прокси-сервер в модель, если у вас нет веской причины не для
  • Всегда используйте полное имя модели
  • Всегда задавайте имя getterName
  • Всегда устанавливайте значение setterName
  • Всегда устанавливайте ассоциациюKey, если посторонний объект возвращается в том же ответе, что и этот объект
  • Всегда устанавливайте foreignKey, если вы хотите загрузить посторонний объект по своему усмотрению.
  • Рассмотрите возможность изменения имени экземпляра на более короткое
  • Геттер ведет себя по-разному в зависимости от того, загружен ли посторонний объект или нет. Если он загружен, возвращается посторонний объект. В противном случае, вам нужно передать обратный вызов, чтобы получить его.
  • Вы должны установить свойство name, если вы планируете переопределить эту связь.
  • Вам не нужно иметь отношение к отношениям для hasMany для работы.
  • Установите свойство primaryKey, если поле id родительской модели не является идентификатором
  • Иногда вам нужно использовать использование или требуется для ассоциации belongsTo. Смотреть для круговых ссылок.
  • Функция вызова setter() похоже, не задает экземпляр. Set object.belongsToInstance = obj if вызов setter().

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

Разное

  • Если вы применяете свои данные к сетке, убедитесь, что вы вызываете reconfigure() в сетке, используя новый магазин
  • Свойство "foreignKey" будет применяться в качестве локального фильтра в хранилище ExtJS; если вы видите загрузку данных по сети, но не показывая в вашей сетке, убедитесь, что ваша модель имеет foreignKey значение, определенное как поле, или локальный фильтр исключает данные quiety. Чтобы проверить, если это так, зацепите в магазин "загрузить", события и вызова store.clearFilters(), и посмотреть, отображаются ли ваши данные.