2012-07-31 2 views
0

다음 백본 ​​(coffeescript) 뷰에서 배열을 전달하고 각 항목을 엘에 추가하려고합니다. 그러나 나는 비어있는 엘을 생각해 내고있다.백본 뷰 엘이 추가되지 않음

ItemTagList = Backbone.View.extend 
    className : "itemTagsContainer" 
    initialize : (tags) -> 
    this.render(tags.taglist) 

    render: (taglist) -> 
    taglist.forEach (tag) -> 
     tag_span = _.template($("#tag").html(), {tag : tag}) 
     $(this.el).append(tag_span) 
     console.log(tag) 

는 템플릿 $("#tag")은 다음과 같습니다 : 렌더링시

<a class='tag' href="/items?tagged_with=<%= tag =>"><%= tag =></a> 

, 위의 제대로 taglist 반복, 그래서 taglist 제대로 백본보기에 전달되는 것을 알고,뿐만 아니라 것 render 함수에 전달합니다.

하지만 내가 할 경우 항상 빈 el를 얻을 수

itemTagList = new ItemTagList 
    taglist : ["Tag1", "Tag2"] 

console.log(itemTagList.el) 

에 따라, 즉

<div class="itemTagsContainer"></div> 

대신 내가 얻을 수 있었으면 된 것입니다

<div class="itemTagsContainer"> 
    <a class='tag' href="/items?tagged_with=Tag1">Tag1</a> 
    <a class='tag' href="/items?tagged_with=Tag2">Tag2</a> 
</div> 

의.

아무도 도와 줄 수 있습니까?

답변

2

forEach 콜백 함수 내에 컨텍스트 문제가 있습니다. @ (AKA this)은 전체 개체 (브라우저에서 window)이므로 this.el은 사용자가 생각하는 것과 다릅니다. 당신은 당신의 콜백 함수를 정의 할 때 fat-arrow (=>)를 사용하여이 문제를 가져올 수 있습니다

render: (taglist) -> 
    taglist.forEach (tag) => 
    tag_span = _.template($("#tag").html(), tag: tag) 
    @$el.append(tag_span) 
    console.log(tag) 

는 또한 @$el로 전환 한보기가 이미 $(@el)의 캐시 된 버전을 사용하기 때문에.

forEach 콜백의 컨텍스트는 당신이있어 어떤 모드에 따라 달라집니다

:

thisArg 매개 변수가 forEach에 제공되는 경우 callback.call(thisArg, element, index, array) 인 것처럼, 그것은 각각의 콜백 호출에 대해이 값으로 사용됩니다

라는. thisArgundefined 또는 null 인 경우 함수 내에서 this 값은 함수가 엄격 모드에 있는지 여부 (엄격 모드에서는 전달 된 값, 비 엄격 모드에서는 전역 개체)에 따라 다릅니다.

=>을 사용하면 걱정할 필요가 없습니다.

taglist.forEach (tag) -> ...., @ 

하지만 커피 스크립트에서 조금 추한 및 성가신 경향 : 양자 택일로, 당신은 thisArg을 사용할 수 있습니다.

+0

와우! 방금 일 했어! 나는 밤새도록 문제를 알아 내려고 노력했다. 해결책을 지적 해 주셔서 감사합니다. coffeescript와 javascript에 대해 더 자세히 알아볼 필요가 있습니다. – DannyClay

+0

@ 대니 클레이 : 천만에. '@'(일명'this')의 올바른 가치를 얻는 것이 아마도 가장 일반적인 (Coffee | Java) 스크립트 문제 일 것입니다. JavaScript에서는'var _this = this;','var that = this,'또는'var self = this;'를 자주 보게 될 것이고'_this','that' 또는'self'를 대신 사용할 수 있습니다 이 '의. –

관련 문제