У меня есть базовое мобильное приложение, привязанное к веб-службе Rails. Все модели других объектов загружаются и отображаются корректно, но этого конкретного нет. Проблема, с которой я сталкиваюсь, заключается в том, что Item
создается, но не загружает атрибуты. Я подтвердил правильный вывод json рельсов api. Разница между этой коллекцией и всеми другими коллекциями этого приложения заключается в том, что эта коллекция имеет родительский идентификатор, который должен использоваться в URL-адресе для загрузки правильных элементов (category_id
).Dynamically set backbone collection url возвращает модели без атрибутов
Теперь ... смешно, что если я удаляю аргумент {category_id: options.attributes[0].category_id}
на вызов конструктора ItemCollectionView
и жесткий код category_id
прямо в URL-адрес, он работает! (Однако мне нужно назначить это динамически в зависимости от категории родительского вида
Вот мои классы:.
export class ItemCollectionView extends Backbone.View {
public template: string;
public collection: itemsImport.Items;
constructor(options?: Backbone.ViewOptions){
this.collection = new itemsImport.Items({category_id: options.attributes[0].category_id});
super(options);
}
...
public addOne(item: itemImport.Item): void{
var view: itemItemImport.ItemItemView = new itemItemImport.ItemItemView({el: this.el, model: item});
//Breakpoint right here shows that item.attributes.id = undefined
view.render();
}
}
export class Items extends Backbone.Collection {
public url: string;
constructor(attributes?: any, options?: any){
this.url = 'http://localhost:3000/categories/' + attributes.category_id + '/items';
this.model = itemImport.Item;
super(attributes, options);
}
}
В моей отладки я могу подтвердить, что:
options.attributes[0].category_id == 1;
и
this.url == 'http://localhost:3000/categories/1/items';
и ответ от этого URL-адреса:
[{"id":1,"category_id":1,"title":"Item 1","description":null,"active":true,"comment":null,"extra":null,"deleted":"0","url":"http://localhost:3000/categories/1/items/1.json"},{"id":2,"category_id":1,"title":"Item 2","description":null,"active":true,"comment":null,"extra":null,"deleted":"0","url":"http://localhost:3000/categories/1/items/2.json"}]
, который вы можете видеть, является правильным ответом json.
Так что мой вопрос: что я делаю неправильно? || Каков правильный способ динамического переноса переменных в коллекции, чтобы установить правильный URL-адрес во время выполнения?
Спасибо за вашу помощь
При использовании машинописного 'url' должно быть свойством, а не методом. Я нашел решение и опубликую его в ближайшее время. В методе выборки коллекции есть опция «url». – SnareChops