您的汽车模型必须包含 user_id 或 user_name 或类似的一些属性,以便您可以获取该数据并在后端进行嵌入。
您还需要使用parse()
模型的方法。您覆盖它以解析来自服务器的 json 响应,当您解析时,您会自动在主干中创建您的用户模型(或引用它,如果它已经创建)。
但我认为你也可以在创建你的汽车模型时这样做,用它的initialize()
方法。
那可能会更好。
但是,如果您要问的是如何根据用户选择合适的汽车,那么当您从服务器请求数据时,则此逻辑在服务器端。您需要在服务器端实现它。
如果你想在客户端的模型中嵌入一个driving_person,就像在你的json响应中一样,只需定义你的driving_person属性,它就会有json对象作为它的值。
如果你想在汽车模型中嵌入一个新的 Backbone.Model,你需要处理initialize()
汽车模型。甚至可能parse()
。
编辑:
如果要在获取后将用户模型嵌入到汽车模型中,则需要重写构造函数方法:
var Car = Backbone.Model.extend({
constructor: function(data, options){
this.driving_person = new User(data.driving_person);
delete data.driving_person;
Backbone.Model.prototype.constructor.call(this, data);
}
/// Your other model code like initialize, etc.
编辑2:
如果您想避免每辆车都有一个新的驱动程序模型(因为可能更多的汽车将共享同一个驱动程序),那么您可能应该有一个全局变量(甚至是一个集合),它采用驱动程序模型。
它需要是前面代码中定义的全局集合。
然后,您将驱动程序添加到我给您的这个构造函数中的那个全局集合中。
假设您在代码前面定义了一个全局 DriverCollection(您可以通过以下方式执行此操作:
window.DriverCollection = Backbone.Collection.extend({
model: Driver,
然后,您将制作这样的汽车模型:
var Car = Backbone.Model.extend({
constructor: function(data, options){
if (!window.DriverCollection.find(function(driver){return driver.name == data.driving_person.name;}))
{window.DriverCollection.add(driving_person);}
data.driving_person = data.driving_person.name;
Backbone.Model.prototype.constructor.call(this, data);
}
/// Your other Car model code like initialize etc.
这样,您的 Car 构造函数获取 JSON 数据并将驱动程序添加到全局 DriverCollection(如果它不存在),并将您的汽车driving_person
属性name
设置为嵌入式 json 驱动程序对象的属性。
当然,您也可以使用其他属性来引用和查找您的驱动程序,例如 id 或其他。
这样可以避免重复。
您需要为此定义 Driver 模型才能工作。