Извините, если это немного запутанно... Я все еще изучаю Backbone.js...
Как правильно загружать и сохранять модели Backbone, которые имеют подмодели внутри себя? (И должны ли у меня вообще быть подмодели?)
Например, (простите за кофескрипт), если у меня есть что-то вроде:
class Address extends Backbone.Model
urlRoot: '/api/v1/address/'
url: -> return @urlRoot+@id+'/?format=json'
defaults: {'city': '', 'state': ''}
class Person extends Backbone.Model
urlRoot: '/api/v1/person/'
url: -> return @urlRoot+@id+'/?format=json'
defaults: { name: 'Anon', address: new Address }
... and then I do this ...
dude = new Person
dude.set('id',101)
dude.fetch()
// Response returns {name: 'The Dude', address: '/api/v1/address/1998/'}
// And now, dude.get('address') is '/api/v1/address/1998' and no Address object
where = new Address
where.set('id',1998)
where.fetch()
// Response returns {city: 'Venice', state; 'CA'}
Что я хочу, так это сказать dude.fetch() и получить как чувака, так и его адрес, и когда я вызываю Backbone.sync('update',dude), я хочу сохранить оба чувак и его адрес. Как?
На бэкэнде я использую deliciouspie для создания своего API для некоторых таблиц SQLAlchemy (не Django ORM), поэтому у меня есть ресурс для моей таблицы Person и таблицы Address:
class AddressResource(SQLAlchemyResource):
class Meta:
resource_name = 'address'
object_class = AddressSQLAlchemyORMClass
class PersonResource(SQLAlchemyResource):
address = ForeignKey(AddressResource, 'address')
class Meta:
resource_name = 'person'
object_class = PersonSQLAlchemyORMClass
Функция Tastypie ForeignKey создает сопоставление, которое возвращает URL< /strong> на указанный адрес.
Я попытался перегрузить функцию Dude.parse() для вызова fetch для Address(), но она не работала и казалась неправильной, вызывая всевозможные вопросы:
- Должен ли я изменить свой ответ на вкусный пирог, чтобы включить адрес как вложенный объект?
- Если я перейду на вложенный объект, должен ли я использовать backbone-relational, как в вопрос Модели, связанные с Backbone-Relational, не создаются, или это излишне ?
- Должен ли я перегружать функцию parse() или fetch() или создать свой собственный backbone.Sync(), чтобы получить ответ, а затем сделать это вручную?
- Поскольку это один к одному, должен ли я вместо этого иметь только одну модель вместо подмодели и отправлять информацию обратно вместе в одном запросе?
Есть ли стандартный способ сделать это?