当一个人在BackboneJS集合上调用fetch()
时,为什么以及如何调用模型中的parse()
?我基本上有 Board 集合和模型,还有 List 集合和模型。 列表属于主板。我希望将列表作为JSON数据发送到 Board 模型(例如,当调用“GET”请求时);但是,我不想在获取集合时将列表作为JSON数据发送。
我的理解是,对集合调用fetch会执行以下步骤(从不浏览模型,更不用说模型上的parse()
了):
控制器中的
index
操作 - >将JSON /数据发送到Backbone - >该集合接收此数据并存储
我有一系列有相关模型的电路板:
主席 收藏:
TrelloClone.Collections.Boards = Backbone.Collection.extend({
url: '/api/boards',
model: TrelloClone.Models.Board
});
TrelloClone.Collections.boards = new TrelloClone.Collections.Boards();
主席 模型:
TrelloClone.Models.Board = Backbone.Model.extend({
urlRoot: '/api/boards',
lists: function() {
if(!this._lists) {
this._lists = new TrelloClone.Collections.Lists([], {board: this});
}
return this._lists;
},
parse: function(response) {
console.log("parsing");
if(response.lists) {
console.log("inside lists");
this.lists().set(response.lists);
delete response.lists;
}
}
});
基本上,对于特定的 Board 模型,我会向该委员会寄回“清单”:
#in the boards controller
def show
@board = Board.includes(:members, lists: :cards).find(params[:id])
if @board.is_member?(current_user)
render :show
else
render json: ["You aren't a member of this board"], status: 403
end
end
...
#in the JBuilder file...
json.extract! @board, :title
json.lists @board.lists do |list|
json.extract! list, :title, :ord
json.cards list.cards do |card|
json.extract! card, :title, :done
end
end
另一方面,对于 Board 集合,我不会发回“列表”:
def index
@boards = current_user.boards
render json: @boards
end
上述实现的问题是,当我fetch()
Board 集合时,每个Board对象的属性都不会被发送。但是当我注释掉parse()
函数时,一切正常。
编辑:
我弄清楚为什么我没有获取集合提取的数据。我在return response
函数的末尾忘了parse
。如果有人能够澄清在获取集合时发生的步骤顺序(在此序列中解析发生的位置),那将是很好的。谢谢!
答案 0 :(得分:1)
查看Backbone的注释来源。
获取数据时,Backbone会设置{reset: false}
或重置{reset: true}
集合值。然后它调用您的成功回调,最后触发sync
:
http://backbonejs.org/docs/backbone.html#section-133
在collection.set
中,您可以确切地看到调用model.parse
方法的时间以及您必须返回响应的原因: