2012-06-29 5 views
0

아무도 jade에서 nodej를 어떻게 사용하는지 조언 해 주시겠습니까? 문자열의 HTML 마크 업에 대해 의식적으로 생각하면 많은 문자/단어로 문자열을자를 수 있습니까?jade (for nodejs) 템플릿의 부분 문자열

이것은 Django의 truncatechars/truncatewords 및 truncatechars_html/truncatewords_html 필터와 유사해야합니다.

이것이 옥에 없으면 어떤 방법으로 가겠습니까? 첫 번째 nodejs + express + CouchDB 앱을 시작하고 nodejs 코드 내에서이를 수행 할 수 있지만 필터가 훨씬 적합하다고 보입니다.

// in nodejs: 
// body variable comes from CouchDB 
res.render('home.jade', { title : "test", featuredNews : eval(body)}); 

// in home.jade template: 
    ul.thumbnails 
    each article in featuredNews.rows 
     a(href="#"+article.slug) 
      li.span4 
       div.value.thumbnail 
        img(align='left',src='http://example.com/image.png') 
        p!= article.value.description:truncatewords_html(30) 

그래서 나는 truncatewords_html (30) 일까지를했습니다 : 나는 어떻게 :))

그냥 빨리 그림 알고 있다면 나는 또한이 같은 필터 (및 기타)을 작성 고려할 것 나는 그것이 유사해야한다고 생각하는 것을 설명한다.

아이디어를 제공해 주셔서 감사합니다.

function truncate(value, arg) { 
    var value_arr = value.split(' '); 
    if(arg < value_arr.length) { 
     value = value_arr.slice(0, arg).join(' '); 
    } 
    return value; 
} 

당신은 템플릿에 문자열을 보내기 전에를 사용하거나 도우미 방법을 사용하여 템플릿 수

감사합니다, 이고르 여기

+3

'eval (body)'는 필요하지 않습니다. –

+0

고마워, 그 질문의 요점은 아니었지만 여전히 도움이되었다! 나는 단지 이것으로 시작하고있다. :) –

답변

2

조금 "truncate_words"기능입니다.

+0

멋지다, 고마워. 그런데 템플릿을 사용하거나 렌더링 전에 사용하는 방법이있다. 그리고 나서 문자열에있는 HTML을 배려하지 않을 것입니다. –

+0

arrh 죄송합니다. 마지막 줄을 읽으십시오 ... "도우미 방법 사용"에 대해 조금 자세히 설명해 주시겠습니까? –

+0

내 자신의 질문에 답하지만 방향에 대해 감사드립니다! –

0

cheerio는 jquery와 jsdom의 하위 집합을 만드는 멋진 작은 라이브러리입니다. 만세,

#{truncateWords_html(article.value.description, 30)} 

이 필터를 추가하는 일반적인 방법과 같습니다 옥 템플릿 사용, 그리고

app.helpers({ 
    truncateWords_html : function(html, words){ 
     return cheerio(html).text().split(/\s/).slice(0, words).join(" ") 
    } 
}) 

: 그럼 간단합니다! :))