Ответ 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(), и посмотреть, отображаются ли ваши данные.