백본

2012-06-04 9 views
2

내가 페이지로드에 컬렉션을 초기화하려고백본

jQuery -> 
    class App.Collections.List extends Backbone.Collection 
    model: App.Models.ListItem 

백본 컬렉션이 백본 lib에 오류가 있습니다. 난에 코드를 변경하는 경우

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 개체. 내 사용자 지정 컬렉션을 다시 설정할 때 특별한 작업을해야합니까?

+0

작품으로 변경 그 목적을 위해 당신이 지금까지의 내가 할 수있는, 최초의 모델을 선언해야했다 설치를 재현하십시오 : http://jsfiddle.net/LXW6h/ – nikoshr

+0

모델 및 콜렉션로드 순서가 올바르지 않습니다. 아래 Derick의 답변과 내 의견을 바탕으로 동성애에 대한 의견을 확인하십시오. – empire29

답변

7

_prepareModel stacktrace 줄은 컬렉션 뒤에 모델이 선언되었다는 힌트를 제공합니다.

당신이 가장 가능성이 코드는 다음과 같이 설정 한 : 당신이 컬렉션의 model 속성에서 사용하려고 할 때 ListItem 때문에 실패 할 것입니다


    class App.Collections.List extends Backbone.Collection 
    model: App.Models.ListItem 

    class App.Models.ListItem extends Backbone.Model 

가 아직 선언되지 않았습니다. 기본적으로 모델 속성을 undefined으로 설정하고 있습니다.

는 먼저 모델을 선언 할 필요가 :이 커피 스크립트 또는 백본의 제한 아니라고


    class App.Models.ListItem extends Backbone.Model 

    class App.Collections.List extends Backbone.Collection 
    model: App.Models.ListItem 

참고. 이것은 객체 리터럴의 사용으로 인해 발생하는 JavaScript 동작입니다. 객체 리터럴 키/값 쌍의 값은 즉시 평가됩니다. 즉,이 값이 존재해야합니다. 그렇지 않으면 정의되지 않은 값이나 다른 오류가 반환됩니다.

Derick으로
+0

감사합니다. 그게 문제였습니다. 임은 중첩 된 목록을 모델링하려고 시도했기 때문에 컬렉션 위의 컬렉션을 모델 위에 두었습니다. 따라서 ListItem 모델에는 App.Collections.List 인 "children"이라는 속성이 있습니다 ... 나는 관계형 백본 모듈을 사용하는 것이 최선이라고 생각합니다. 이것을 성취하기에 가장 좋은가? – empire29

+0

백본으로 함수를'model' 속성으로 지정할 수 있습니다 ...'App.Collections.List = Backbone.Collection.extend ({model : function() {return MyModelType;}); 'model' 속성을 액세스 할 때 함수가 런타임에 실행되는 것과 같은 제한입니다. –

0

는 주문하십시오 App.coffee (주 백본 파일)을 필요로 그냥 보통 날이

... 
require_tree ./models 
require_tree ./collections 
...