emp*_*e29 2 javascript collections backbone.js
我有一个Backbone集合
jQuery ->
class App.Collections.List extends Backbone.Collection
model: App.Models.ListItem
Run Code Online (Sandbox Code Playgroud)
我正在尝试在页面加载时初始化集合:
var list = new App.Collections.List;
list.reset(<%= @data.to_json.html_safe %>)
Run Code Online (Sandbox Code Playgroud)
这会在骨干lib中引发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)
Run Code Online (Sandbox Code Playgroud)
但是,如果我将代码更改为:
var list = new Backbone.Collections;
list.reset(<%= @data.to_json.html_safe %>)
Run Code Online (Sandbox Code Playgroud)
重置工作,并填充集合 - 认为集合中的对象似乎不知道它们应该是ListItem对象.我是否必须对我的自定义集合的所有重置做一些特别的事情?
该_prepareModel堆栈跟踪行给出,你有你收集后宣布模型的提示.
您最有可能将代码设置为:
class App.Collections.List extends Backbone.Collection
model: App.Models.ListItem
class App.Models.ListItem extends Backbone.Model
Run Code Online (Sandbox Code Playgroud)
ListItem当你试图在你的集合的model属性中使用它时,它将失败,因为它还没有被声明.您实际上是将model属性设置为undefined.
您需要先声明模型:
class App.Models.ListItem extends Backbone.Model
class App.Collections.List extends Backbone.Collection
model: App.Models.ListItem
Run Code Online (Sandbox Code Playgroud)
请注意,这不是CoffeeScript或Backbone的限制.这是由使用对象文字引起的JavaScript行为.立即计算对象文字键/值对的值,这意味着它必须存在,否则将返回为未定义或抛出其他错误.
| 归档时间: |
|
| 查看次数: |
2973 次 |
| 最近记录: |