underscore.js 템플릿에서 if 문을 사용하는 방법은 무엇입니까?


239

underscore.js 템플릿 기능을 사용하고 있으며 다음과 같은 템플릿을 수행했습니다.

<script type="text/template" id="gridItem">
    <div class="griditem <%= gridType %> <%= gridSize %>">
        <img src="<%= image %>" />
        <div class="content">
            <span class="subheading"><%= categoryName %></span>
            <% if (date) { %><span class="date"><%= date %></span><% }  %>
            <h2><%= title %></h2>
        </div>
    </div>
</script>

보시다시피 모든 모델에 날짜 매개 변수가 없으므로 if 문이 있습니다. 그러나 이렇게하면 오류가 발생 date is not defined합니다. 그렇다면 템플릿 내에서 if 문을 어떻게 수행 할 수 있습니까?

답변:


442

트릭을 수행해야합니다.

<% if (typeof(date) !== "undefined") { %>
    <span class="date"><%= date %></span>
<% } %>

underscore.js 템플릿에 그 기억 iffor에 싸여 단지 표준 자바 스크립트 구문입니다 <% %>태그.


2
훌륭하게 작동하고 JS 스위치 / 케이스 문도 템플릿 마크 업에서 잘 작동한다는 것을 알았습니다.
nickb

멋진 답변입니다. 템플릿을 사용할 때 대체 클래스를 사용하는 방법도 알려주시겠습니까? 첫 번째 <li>처럼 클래스 a와 다음 b를 가져와야합니까?
BlackDivine

4
나는 그것이 종류 늦게 알고 @BlackDivine하지만, 교류 스타일을 위해 당신은 사용해야 :nth-child(even):nth-child(odd)CSS 선택기는, 템플릿을 변경할 수 없습니다.
prayerslayer

그 JSP에서 변수를 렌더링에 사용되는 자바 스크립 같은보고
던전 헌터

<% %> 래퍼를 변경해야했기 때문에 {{}}} 끝에이 줄로 끝났습니다.
0v3rth3d4wn 12

78

else if 서술문을 선호하는 경우이 속기를 사용할 수 있습니다.

<%= typeof(id)!== 'undefined' ?  id : '' %>

유효하면 ID를 표시하고 유효하지 않은 경우 비어 있습니다.


6
삼항 연산자
user457015

4
조건부 연산자 는 "삼항"이라는 별명을 갖는 유일한 공통 삼항 연산자 (3 개 피연산자)이기 때문에 별명입니다.
Keen

1
이 답변에서 제안 된 기술의 부족한 점은 문자열 보간을 다시 반복해야한다는 것입니다.이 템플릿은 해결해야합니다. 현재는 컴파일 된 각 코드 태그의 시작 부분에 _.templatea ;를 삽입합니다 . 따라서, 문장 내부의 태그를 처리 할 수 ​​있지만 표현식 내부에서는 태그를 처리 할 수 ​​없습니다. 비교 ;if(a){b;}else{c;};a?b;:c;.
Keen

21

상황 및 스타일에 따라 직접 출력 할 수 있으므로 태그 내부에서 인쇄를 사용하고 싶을 수도 있습니다 <% %>. 처럼:

<% if (typeof(id) != "undefined") {
     print(id);
}
else {
    print('new Model');
} %>

그리고 일부 연결이있는 원본 스 니펫의 경우 :

<% if (typeof(date) != "undefined") {
    print('<span class="date">' + date + '</span>');
} %>

9

null 검사를 포함 해야하는 경우 underscore.js의 간단한 if / else 검사가 있습니다.

<div class="editor-label">
    <label>First Name : </label>
</div>
<div class="editor-field">
    <% if(FirstName == null) { %>
        <input type="text" id="txtFirstName" value="" />
    <% } else { %>
        <input type="text" id="txtFirstName" value="<%=FirstName%>" />
    <% } %>
</div>

1
null가 여전히 오류가 발생 것, 정의와 동일하지 않습니다
xorinzor

4
이 경우 값을 변환하는 ==를 사용하여 값을 확인하므로 중요하지 않습니다. 타입 변환 때문에 다음 문장은 참이다 : null == undefined-그것을지지하지 않고, 단지 말.
Johannes Lumpe

나는 그것을 사용하는 것이 좋습니다 생각_.isEmpty()
닉 바렛

5

위의 blackdivine에 응답하여 (결과를 스트라이프하는 방법에 대해) 이미 답변을 찾았을 수 있지만 (그렇다면 공유하지 않는 것이 부끄러운 일입니다!), 가장 쉬운 방법은 모듈러스 연산자를 사용하는 것입니다. 예를 들어 for 루프에서 작업하고 있다고 가정 해보십시오.

<% for(i=0, l=myLongArray.length; i<l; ++i) { %>
...
<% } %>

해당 루프 내에서 색인 값을 확인하십시오 (i의 경우).

<% if(i%2) { %>class="odd"<% } else { %>class="even" <% }%>

이렇게하면 나머지 인덱스를 2로 나눈 값을 확인할 수 있습니다 (각 인덱스 행에 대해 1과 0 사이를 전환합니다).


3

_.isUndefined 를 사용해보십시오 .

<% if (!_.isUndefined(date)) { %><span class="date"><%= date %></span><% } %>

"날짜가 정의되지 않았습니다"와 "날짜가 정의되지 않았습니다"의 차이점에 유의하십시오. " 'date'라는 이름의 변수 또는 전역 속성이 없습니다."라는 오류를 호출해야합니다. 제안한 코드는 date존재하지 않는 경우 여전히 예외를 발생 시킵니다. typeof이 경우 템플릿 데이터를 오리 타이핑 할 때 명명 된 변수를 사용하는 것이 더 낫지 만이 경우에는 실제로 필요합니다 .
Keen

0

에서 여기 :

"변수로 액세스하는 대신 해당 객체를 통해 데이터 객체의 속성을 참조 할 수도 있습니다." OP의 경우 이것이 가능하다는 것을 의미합니다 (다른 가능한 솔루션보다 훨씬 작은 변경으로).

<% if (obj.date) { %><span class="date"><%= date %></span><% }  %>

0

공식 문서_.isNull 에서 사용할 수있는 null 값을 확인하려면

isNull_.isNull(object)

object의 값이 null 인 경우에 true를 리턴합니다.

_.isNull(null);
=> true
_.isNull(undefined);
=> false
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.