[英]Backbone - Why doesn't a collection.reset trigger a model event?
[英]Backbone Collection.reset() doesn't work on extended Collections
我有骨干收藏
jQuery ->
class App.Collections.List extends Backbone.Collection
model: App.Models.ListItem
我正在嘗試在頁面加載時初始化集合:
var list = new App.Collections.List;
list.reset(<%= @data.to_json.html_safe %>)
這會在主干庫中引發JS錯誤。
Uncaught TypeError: undefined is not a function application.js:597
f.extend._prepareModel application.js:597
f.extend.add application.js:591
f.extend.reset application.js:595
(anonymous function)
但是,如果我將代碼更改為:
var list = new Backbone.Collections;
list.reset(<%= @data.to_json.html_safe %>)
重置有效,並且集合被填充-認為集合中的對象似乎不知道它們應該是ListItem對象。 我是否需要對所有自定義收藏夾進行重新設置?
_prepareModel
stacktrace行提示您在集合之后聲明了模型。
您很可能將代碼設置如下:
class App.Collections.List extends Backbone.Collection
model: App.Models.ListItem
class App.Models.ListItem extends Backbone.Model
這將失敗,因為在嘗試在集合的model
屬性中使用ListItem
時尚未聲明它。 您實際上是將model屬性設置為undefined
。
您需要先聲明模型:
class App.Models.ListItem extends Backbone.Model
class App.Collections.List extends Backbone.Collection
model: App.Models.ListItem
請注意,這不是CoffeeScript或Backbone中的限制。 這是由於使用對象文字導致的JavaScript行為。 對象文字鍵/值對的值將立即求值,這意味着它必須存在,否則將返回undefined或引發其他錯誤。
正如Derick所說的那樣,您需要先聲明模型,為此,我通常只是更改需求命令App.coffee(主主干文件)至此
...
require_tree ./models
require_tree ./collections
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.