很抱歉,如果這是一個有點令人費解......我仍然在學習Backbone.js的...如何在Backbone.js中加載具有外鍵關係的子模型?
什麼是加載&保存有自身內子模型骨幹模型的正確方法? (應該我甚至是具有子模型?)
例如,(原諒的CoffeeScript),如果我有這樣的:
class Address extends Backbone.Model
urlRoot: '/api/v1/address/'
url: -> return @[email protected]+'/?format=json'
defaults: {'city': '', 'state': ''}
class Person extends Backbone.Model
urlRoot: '/api/v1/person/'
url: -> return @[email protected]+'/?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('更新',夥計)時,我想保存這個傢伙和他的地址。怎麼樣?
在後端,我使用tastypie構建我的API對於一些SQLAlchemy的表(不Django的ORM),所以我有我的個人表和地址表的資源:
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()函數來調用獲取的地址(),但它不工作了,感覺錯了,它提出了各種各樣的問題:
- 我應該修改我的tastypie響應以將地址作爲嵌套對象包含在內?
- 如果我改變爲一個嵌套的對象,我應該使用backbone-relational,如在問題Backbone-Relational related models not being created,或者是過度殺傷?
- 我應該是overloading the parse()或fetch()函數或創建自己的backbone.Sync()來獲取響應,然後手動執行此操作?
- 由於它是一對一的,我應該只需要一個模型而不是子模型,並且在一個請求中一起發回信息?
有沒有這樣做的標準方法?