2013-07-07 3 views
1

'@content'를 호출 한 후 레이아웃 파일에서 페이지 끝 스크립트 (또는 기타 컨텐츠)를 가져 오는 데 문제가 있습니다. ' 나는 coffeekup 템플릿을 사용하고 있으며 다음 default.html.coffee 레이아웃 파일을 가지고 있습니다.'content'템플릿 데이터 변수를 참조한 후 Docpad coffeekup 레이아웃 파일에 스크립트/컨텐츠 포함

doctype 5 
html -> 

    head -> 

    meta(charset:"utf-8") 
    title("Docpad") 
    if @document.description? 
     meta(name:"description", content:@document.description) 

    stylesheets = ['/styles/app.css'] 
    @getBlock('styles').add(stylesheets).toHTML() 

    body -> 

    div class:"row", -> 
     div class:"large-12 columns", -> 
     h1(class:"docs header", "Header") 
     hr() 

    @content 
    @getBlock('scripts').toHTML() 

내가 실행하고있어 문제 '@content가'제대로 산출 예를 들어, 위의 (경우 @getBlock ('스크립트') 라인을 아무것도를 다음없는 경우에만 페이지 특정 콘텐츠를 렌더링하는 것입니다, 삭제되거나 주석 처리됩니다). 그러나 위의 코드에서는 스크립트에 대한 getBlock 호출이 성공하지만 '@content'는 내용을 삽입하지 않습니다. 도움이 감사, 감사합니다.

답변

1

코드의 컴파일 된 자바 스크립트를 살펴 보겠습니다. 우리는이 일을 coffeescript.org에 컴파일러를 사용할 수 있습니다 this.content 그냥 비 실행 가능한 문이 얼마나

doctype(5); 

html(function() { 
    head(function() { 
    var stylesheets; 
    meta({ 
     charset: "utf-8" 
    }); 
    title("Docpad"); 
    if (this.document.description != null) { 
     meta({ 
     name: "description", 
     content: this.document.description 
     }); 
    } 
    stylesheets = ['/styles/app.css']; 
    return this.getBlock('styles').add(stylesheets).toHTML(); 
    }); 
    return body(function() { 
    div({ 
     "class": "row" 
    }, function() { 
     return div({ 
     "class": "large-12 columns" 
     }, function() { 
     h1({ 
      "class": "docs header" 
     }, "Header"); 
     return hr(); 
     }); 
    }); 
    this.content; 
    return this.getBlock('scripts').toHTML(); 
    }); 
}); 

알 수 있습니다. 마치 내가 이런 짓을 한 것처럼 : "a"; "b"; "c"; "d" 아무것도하지 않을 것입니다.

당신이 작성한 코드의 용도 또는 의도는 CoffeeKup 또는 CoffeeScript가 작동하는 방식에 대한 오해를 암시하는 것으로 보이므로 어떤 일이 일어나고 있는지, 때로는 작동하는지, 때로는 그렇지 않은지를 평가하게하십시오. 우리가 div -> "blah"을 수행 할 때

는 함수 div을 통과 말한다 div(function(){return "blah";})에 comiles 문자열 ㅋ를 반환이라고 때. 이제 CoffeeKup은 모든 문자열이 반환되기 때문에 편의상 렌더링해야합니다. 그러나 우리가 여러 가지를 되돌릴 수는 없으므로 (첫 번째 반환이 블록으로 존재하기 때문에), 우리는 무엇을해야합니까? 컴파일

div -> 
    text "a" 
    text "b" 

은 다음과 같습니다 :

CoffeeKup 우리가 할 수는 text 기능을 제공합니다 우리가 원하는 단지 무엇

div(function() { 
    text("a"); 
    return text("b"); 
}); 

단지 div 같은 text 전화 등 및 다른 모든 요소 호출은 문자열을 반환하지 않고 내용을 직접 출력합니다. 이가되도록,

@content 
@getBlock('scripts').toHTML() 

text 전화로 : : 혹시 HTML 엔티티를 탈출하려면

text @content 
text @getBlock('scripts').toHTML() 

(그래서 변환

그래서 모두 모두,이 솔루션은 접두사입니다 < ~ &lt;) h 전화를 추가하려는 경우 h "content to be escaped"text을 결합하면 text h "content to be escaped"처럼 보일 것입니다. 지금 당장 필요하거나 여기있는 것이 아닙니다.

+0

예, 빠른 응답을 주셔서 감사합니다. – 8ken

+0

달콤한! 그것이 문제를 해결했다면, 사람들이 문제가 해결되었다는 것을 알 수 있도록 그 옆에있는 체크 표시를 클릭하여 답을 수락 된 대답으로 표시하십시오. 더 많은 정보는 여기 : http://meta.stackexchange.com/a/5235/149978 – balupton

+0

Done, thanks again, loving Docpad. – 8ken