【发布时间】:2014-09-08 18:02:40
【问题描述】:
编辑 tl;dr: 我只想获取模型并将它们添加到满足某些验证标准的集合中。如果我只获取一个模型,我可以使用model.validate() 方法,但是在使用collection.fetch() 时,不会调用model.validate()。
我正在使用 github gist API 制作一个 gist fallery,一个 la bl.ocks.org。我只想显示具有“标签”文件的要点,所以我的要点模型上有一个验证方法:
class Gist extends Backbone.Model
validate: (attrs, options)->
if attrs.files.hasOwnProperty("tags") is false
return "no tags file"
sync: (method, model, options) ->
options.timeout = 8000
options.dataType = 'jsonp'
options.validate = true
return Backbone.sync(method, model, options)
defaults: ......
parse: (data)-> ......
当我从 github 获取一个要点时,这可以正常工作。但是,当我获取一系列要点时,不会触发此验证方法。
class Gists extends Backbone.Collection
model: Gist
sync: (method, model,options) ->
options || options = {}
options.timeout = 8000
options.dataType = 'jsonp'
options.validate = true
return Backbone.sync(method, model, options)
parse: (response) ->
response.data
#more methods here, including initialize, comparator, and custom ones
我现在的行为是,当我显示要点列表时,我会得到没有“标签”文件的要点的缩略图(见下面的屏幕截图)。但是,当我单击具有无效 gist 的缩略图时,它不会显示,因为 validate 方法返回了 validationError(单击缩略图时会调用 gist 模型的fetch 方法以获取附加信息渲染前来自 github 的信息)
如果模型没有标签文件,我如何使用模型的validate 方法确保模型不会通过collection.fetch 添加到集合中?
【问题讨论】:
-
在收集时使用解析器(解析函数)过滤掉不需要的模型。
-
谢谢,效果很好。我现在意识到
backbone-fetch-cache.正在发生更阴险的事情。在第一页加载时,模型已正确验证,只有在随后的刷新时才显示无效模型。但是使用 collection.parse 解决了这个问题。
标签: javascript backbone.js coffeescript backbone.js-collections backbone-model