2011-09-14 3 views
1

here에 위치한 BackboneJs에서 찾은 자습서를 따르고 있습니다. 반쯤 그가 다음을 수행하는 render 방법에 대해BackboneJs 튜토리얼 질문

:

events: { 'click button#add': 'addItem' }, 

    initialize: function() { 
     this.collection = new List(); 

     // Collection event binder 
     this.collection.bind('add', this.appendItem); 

     this.counter = 0; 
     this.render(); 
    }, 

    render: function() { 
     this.el.append("<button id='add'> Add List Item</button>"); 
     this.el.append("<ul></ul>"); 

     _(this.collection.models).each(function(item){ 
      // in case collection is not empty 
      appendItem(item); 
     }, this); 
    }, 

    addItem: function() { 
     var item = new Item(); 

     this.counter++; 

     item.set({ 
      part2: item.get('part2') + " " + this.counter 
     }); 

     this.collection.add(item); 
    }, 

    appendItem: function (item) { 
     $('ul').append('<li>' + item.get('part1') + " " + item.get('part2') + '</li>'); 
    } 

나는 아래 라인에 대한 몇 가지 질문이 있습니다.

_(this.collection.models).each(function(item){ 
    // in case collection is not empty 
    appendItem(item); 
}, this); 

이 문맥에서 밑줄 _은 무엇을합니까?

왜 이것이 필요한가요?

댓글에 컬렉션이 비어 있지 않은 경우를 말합니다. 그러나 그 라인이 없으면 잘 작동합니다. initialize 함수의 bind 재정의는 add 이벤트가 컬렉션에서 트리거 될 때 this.appendItem을 실행하도록 Backbone에 알려주므로 문제의 라인을 제거하여 생각하고 확인했습니다.

답변

2

이 메서드는 일반적으로 "밑줄"헬퍼 클래스에 배열을 래핑하여 모든 underscore.js 도우미 메서드에 액세스 할 수 있다고 생각합니다. 이 경우 각 메소드는 밑줄 도우미 클래스에서옵니다.

당신이 말했듯이, 이것 없이는 잘 작동합니다. 이 튜토리얼을 작성한 백본의 버젼 (v3. 3. 3)에서는, 모델의 배열이 이처럼 반복되도록 (듯이) _ 메소드가 필요하게되는 경우가 있습니다.

underscore.js (http://documentcloud.github.com/underscore/)에 대한 설명서는 객체 지향적 인 mannter에서 라이브러리를 사용하는 대신 _()을 메서드 호출로 사용하는 방법에 대해 설명합니다.

+0

Perfect. 감사. 나는 언더 스코어 (underders)가 의존성이라는 것을 완전히 잊어 버렸습니다. 아마도 그것이 백본 일이라고 생각했습니다. –