对不起,如果这有点令人费解......我还在学习 Backbone.js......
加载和保存具有子模型的主干模型的正确方法是什么?(我什至应该有子模型吗?)
例如,(请原谅咖啡脚本),如果我有类似的东西:
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) 时,我想保存这个家伙和他的地址。如何?
在后端,我使用tastepie 为一些SQLAlchemy 表(不是Django 的ORM)构建我的api,所以我有一个资源用于我的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返回到相关地址。
我尝试重载 Dude.parse() 函数来调用 Address() 的 fetch,但它不起作用并且感觉不对,并且引发了各种各样的问题:
- 我应该修改我的美味响应以将地址包含为嵌套对象吗?
- 如果我更改为嵌套对象,我应该使用主干关系,如未创建主干关系相关模型的问题,还是过度杀伤?
- 我应该重载 parse()或 fetch() 函数还是创建自己的主干.Sync() 以获取响应然后手动执行此操作?
- 既然是一对一的,我是否应该只拥有一个模型而不是子模型,然后在一个请求中将信息一起发送回?
有这样做的标准方法吗?