#javascript #json #extjs #sencha-touch
#javascript #json #extjs #сенча-касание
Вопрос:
Рассмотрим следующую структуру JSON
{
"id": 123,
"name": "Ed",
"orders": [
{
"id": 50,
"total": 100,
"order_items": [
{
"id": 20,
"price": 40,
"quantity": 2,
"product": {
"id": 1000,
"name": "MacBook Pro"
}
},
{
"id": 21,
"price": 20,
"quantity": 3,
"product": {
"id": 1001,
"name": "iPhone"
}
}
]
}
]
}
Вот мои модели
Ext.define("User", {
extend: 'Ext.data.Model',
fields: [
'id', 'name'
],
hasMany: {model: 'Order', name: 'orders', associationKey: 'orders'}
});
Ext.define("Order", {
extend: 'Ext.data.Model',
fields: [
'id', 'total'
],
hasMany : {model: 'OrderItem', name: 'orderItems', associationKey: 'order_items'}
});
Ext.define("OrderItem", {
extend: 'Ext.data.Model',
fields: [
'id', 'price', 'quantity'
],
hasOne : {
model: 'Product',
name: 'product',
associationKey: 'product'
}
});
Ext.define("Product", {
extend: 'Ext.data.Model',
fields: [
'id', 'name'
]
});
Когда я загружаю данные в свое хранилище, а затем проверяю запись хранилища, я вижу это
Я не получаю заказы и прочее внутри него. Должно быть, что-то не так с тем, как я определил модели, но, похоже, я не могу в этом разобраться. Заранее спасибо.
Обновление Вот мое хранилище и то, как я загружаю данные
Ext.define('Company.store.TestOrders', {
extend: 'Ext.data.Store',
alias: 'store.testorders',
model: 'User',
data:[
{
"id": 123,
"name": "Ed",
"orders": [
{
"id": 50,
"total": 100,
"order_items": [
{
"id": 20,
"price": 40,
"quantity": 2,
"product": {
"id": 1000,
"name": "MacBook Pro"
}
},
{
"id": 21,
"price": 20,
"quantity": 3,
"product": {
"id": 1001,
"name": "iPhone"
}
}
]
}
]
}],
storeId: 'TestOrders',
proxy: {
type: 'memory'
}
});
Затем позже я просматриваю данные, используя
Ext.getStores('TestOrders').getAt(0);
Комментарии:
1. здравствуйте, можете ли вы предоставить хранилище и элемент, к которому вы его прикрепляете? где нет проблем с вашим кодом. это работает, вы можете проверить это на этой скрипке fiddle.sencha.com/#view/editoramp;fiddle/2qqj
2. @LightNight Спасибо за ответ. Я обновил свой вопрос, включив в него хранилище и способ загрузки данных.
3. @LightNight, я вижу разницу между вашим подходом и моим. Можете ли вы сказать мне, почему для вашей модели магазина установлено значение «Продукт» вместо «Пользователь». Я думал, мы должны были назначить корневую модель хранилищу в подобных случаях?
Ответ №1:
Может быть, вы ищете способ получать заказы и заказывать товары из пользовательского магазина?
Вы можете получить коллекцию заказов из записи пользователя, используя метод record.orders()
. То же самое для элемента заказа в записи коллекции заказов : order_record.order_items()
.
Проверьте этот пример на fiddle
Комментарии:
1. Вы правы. Это дает мне то, что я искал.