骨干提取如何构建模型或集合?

时间:2012-11-12 00:38:07

标签: javascript backbone.js fetch

在许多骨干示例中,我看到了带有mymodel.fetch()mycollection.fetch()的代码,并且大多数代码都没有使用成功回调来构建响应中的模型/集合。我正在填写,因为我遗漏了一些关于fetch如何从结果中创建模型实例的东西。这是怎么发生的?

编辑

  1. Thare是模型与返回的json结构不同的情况,需要映射模型属性。例如,模型属性是'name'和'age',但返回的json是:{n_name:'dan',props:{age:12,address:'此数据不相关'}}。需要将返回的json映射到模型。我该怎么做?这种情况是否迫使我使用成功回调?

  2. 有时,模型包含与其他模型或集合的关系。例如,具有AddressModel类型属性的HouseModel和名为People的人员集合。我希望fetch在构造AddressModel时创建一个模型,并在构造People时创建一个people集合。我该怎么做?我应该使用此成功还是其他方式/解决方法?

2 个答案:

答案 0 :(得分:1)

模型的实例已经“构建”。这就是你所说的fetch()

否则,正在发生的是响应JSON用于将每个键值对分配为该模型实例的属性。对于集合,它正在根据响应创建新模型。

基本上是这样的:

// This line instantiates a new model
var model = new MyApp.Models.ModelThing();
// This line loads the model's attributes from the database
model.fetch();

如果您对这一切发生的原因感兴趣,请查看Backbone.sync方法。这就是AJAX请求的实际内容,并触发处理响应的大多数回调。

可以传递给fetch的成功和错误回调纯粹是可选的,用于执行清理失败的加载或向用户发出加载发生的信号。

答案 1 :(得分:0)

这是你可以从中得到这个的一个例子。 我建议你操纵&使用成功回调中的更新模型 函数,因为这是异步方法,它可能是您之后实际使用模型的唯一方法。

var MyModel = new Todo({id: Number(item)});
MyModel.fetch({success:function(){
        var todo = new updateView({model: dModel });
        todo.render();  
}});

模型已经使用获取的数据构建,但在成功回调中使用填充的模型。

编辑:

对于您的第一个问题:您需要查看model.parse或collection.parse的文档,以便您可以为后端的响应自定义主干提取。这样做很容易:

var Collection = Backbone.Collection.extend({

    parse: function(data){return data.objects;} 

});

对于你的另一个问题,我并没有得到你想要做的事情。 但我认为这应该是非常简单的。你可以两种方式做到这一点。 只是不要尝试使用构造和&在同一个函数中(在绑定事件和成功回调之外)自己获取集合,因为由于异步获取,你可能什么也得不到。