簡體   English   中英

Backbone Collection.reset()在擴展Collections上不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM