2011-12-13 2 views
2

백본 컬렉션을 초기화했지만 호출에서 호출이 작동하지 않습니다. 어떤 이유로 나는 JS 오류를 받고 있어요 : 백본 컬렉션에서 호출을 호출합니다.

var vw = new SomeView(); // A view with function 'refresh' 
var col = new Backbone.Collection(); 
col.add(vw); 
... 
setTimeout(function(){ col.invoke('refresh'); }, 1000); // Error: Cannot call method 'apply' of undefined 

그러나, IsEmpty 함수 같은 호출 방법은 내가 매우 분명 뭔가가있어 보인다

console.log("Is empty? ", col.isEmpty()); // prints: 'Is Empty? false' 

잘 작동

.

N.B : 나는 각 기능 를 호출하고 그 그냥 투박 때문에 뷰 객체에를 새로 를 호출에 관심이 아니에요.

답변

3

백본의 컬렉션은 모델 목록입니다. 따라서 내부적으로 콜렉션에 뷰를 추가하면 col.add(Backbone.Model.extend(vw))과 같은 콜이 생깁니다. 그러면 생성자 매개 변수로 뷰가있는 새 모델이 만들어집니다. 내가 처음이 방금

+0

을보기를 추가하는 것이있다 (예 : 콜렉션 변경시 발생하는 이벤트) _invoke_와 같은 메소드를 호출하면 코드를보다 쉽게 ​​읽을 수 있습니다. 내 명백한 대안은 각 ** 방법을 사용하는 것입니다. 어쨌든 도움을 주셔서 감사합니다. – Waseem

+0

호출이 필요한 경우 밑줄 colleection.invoke 메서드를 사용하십시오. http://documentcloud.github.com/underscore/#invoke –

+0

알립니다. 당신이 맞았 어, 컬렉션에 추가되면 뷰가 어떤 모델로 바뀌므로 ** invoke **는 ** 내부 ** 모델 인스턴스로부터 ** ** 그것을 얻지 않고 수동으로 호출하지 않으면 ** 새로 고침 **을 찾지 못할 것이다. 필자는 데이터 저장소로 간단한 배열로 전환하고 메서드 호출에 밑줄의 ** invoke **를 사용했습니다. 도와 주셔서 감사합니다. – Waseem

0

당신이 컬렉션 자체 를 인스턴스화하여 컬렉션을 만들려고 자바 스크립트 배열 또는 스마트 밑줄 모음을 사용하여 목록에서보기를 저장 싶어 F를 확장하는 그것이 무엇 모델을 만들기 위해 ' 을 들고 내가 위에있는 것을보고 컬렉션에 자신의 견해를 표시하려고합니까? 직접 수집 할 수는 없지만 컬렉션에는보기가 아닌 모델 목록이 있습니다. 그러나보기를 정의하는 모델을 만들 수 있습니다.

var myView = Backbone.View.extend({}); 
var myModel = Backbone.Model.extend({}); 
var myCollection = Backbone.Collection.extend({ model: myModel }); 

$(function(){ 

    // creating your view 
    var vw = new SomeView(); 

    // creating a model for the view 
    var viewModel = new myModel({ linkedview : vw }); 

    // creating a collection 
    var modelList = new myCollection(); 
    modelList.add(viewModel); 

}); 

그것의 요점은, 모델을 만들 뷰에 대한 참조를 포함하지 백본 컬렉션의 다른 혜택 옆에 (작동하지 않을 것이다) 컬렉션에 직접

+0

** 나는 각 **을 사용하는 것이 더 나을 것 같지만 오히려 내 코드를 더 어둡고 이해하기 어렵게 만듭니다. BTW, 전 임의의 JSON 개체와 컬렉션을 사용했습니다 그리고 그것은 나를 위해 잘 작동합니다. – Waseem

+0

예, 일반적으로 컬렉션에 들어가는 모델을 정의합니다. json을 넣으면 그 모델의 새 인스턴스에 넣습니다. – Sander

+0

@Andreas가 더미 모델을 만든 다음 컬렉션에 추가하는 것이 더 간단합니다. 거의 사용하지 않는다. 어쨌든 도움을 주셔서 감사합니다. – Waseem

관련 문제