Javascript 如何构造模型或集合?
在许多主干示例中,我看到使用Javascript 如何构造模型或集合?,javascript,backbone.js,fetch,Javascript,Backbone.js,Fetch,在许多主干示例中,我看到使用mymodel.fetch()或mycollection.fetch()的代码,并且大多数代码都没有使用成功回调来根据响应构造模型/集合。我正在填充,好像我遗漏了一些关于fetch如何从结果创建模型实例的信息。这是怎么发生的 编辑 有些情况下,模型与返回的json结构不同,需要映射模型属性。例如,模型属性是'name'和'age',但返回的json是:{n_name:'dan',props:{age:12,address:'此数据不相关'}}。需要将返回的json映射
mymodel.fetch()
或mycollection.fetch()
的代码,并且大多数代码都没有使用成功回调来根据响应构造模型/集合。我正在填充,好像我遗漏了一些关于fetch如何从结果创建模型实例的信息。这是怎么发生的
编辑
该模型的实例已“构建”。这就是您在上调用的
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的成功和错误回调对于清除失败的加载或向用户发出加载发生的信号等操作来说完全是可选的。模型的实例已经“构建”。这就是您在上调用的
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的成功和错误回调对于清除失败的加载或向用户发出加载发生的信号等操作来说完全是可选的。这是您可以从中获得的一个示例。 我建议您操作并使用成功回调中更新的模型 函数,因为这是一种异步方法,而且这可能是以后实际使用模型的唯一方法
var MyModel = new Todo({id: Number(item)});
MyModel.fetch({success:function(){
var todo = new updateView({model: dModel });
todo.render();
}});
模型已经用获取的数据构建,但在成功回调中使用该填充模型
编辑:
对于第一个问题:您需要查看或collection.parse的文档,以便为后端的响应定制主干提取。这样做相当容易:
var Collection = Backbone.Collection.extend({
parse: function(data){return data.objects;}
});
至于你的另一个问题,我不太明白你想做什么。
但我认为这应该非常简单。两种方法都可以。
只是不要尝试在同一个函数中单独使用构造的和获取的集合(在绑定事件和成功回调之外),因为由于异步获取,您可能什么也得不到。这是一个示例,您可以从中获得此结果。 我建议您操作并使用成功回调中更新的模型 函数,因为这是一种异步方法,而且这可能是以后实际使用模型的唯一方法
var MyModel = new Todo({id: Number(item)});
MyModel.fetch({success:function(){
var todo = new updateView({model: dModel });
todo.render();
}});
模型已经用获取的数据构建,但在成功回调中使用该填充模型
编辑:
对于第一个问题:您需要查看或collection.parse的文档,以便为后端的响应定制主干提取。这样做相当容易:
var Collection = Backbone.Collection.extend({
parse: function(data){return data.objects;}
});
至于你的另一个问题,我不太明白你想做什么。
但我认为这应该非常简单。两种方法都可以。
只是不要在同一个函数中单独使用构造的和获取的集合(在绑定事件和成功回调之外),因为由于异步获取,您可能什么也得不到。为此,您可以使用:model.on('change',yourFunc),然后每次模型更新时都会呈现视图。谢谢,我认为parse解决了我的两个问题。但也出现了另一个问题。如果parse负责解析数据,则必须只有一个数据结构。例如,如果我有两个返回不同数据结构的Web服务,并且这两个Web服务都应该被提取到模型中,那么我该怎么做呢?您必须更具体地说明您要做什么。我建议你为此提出一个新问题。如果parse解决了您的问题,那么接受答案。为此,您可以使用:model.on('change',yourFunc),然后每次模型更新时,都会呈现视图。谢谢,我认为parse解决了我的两个问题。但也出现了另一个问题。如果parse负责解析数据,则必须只有一个数据结构。例如,如果我有两个返回不同数据结构的Web服务,并且这两个Web服务都应该被提取到模型中,那么我该怎么做呢?您必须更具体地说明您要做什么。我建议你为此提出一个新问题。如果parse解决了你的问题,那么接受答案。