2013-06-07 6 views
16

에 정의되지 않은 변수에 대한 점검이 같은 내 템플릿에 libraryPrep 개체의 모달 뷰를 보여줍니다. 나는 libraryPreps 객체가없는 경우밑줄 템플릿

<select id="libraryPreps" > 
        <% if (!_.isUndefined(libraryPreps)) { %> 
        <% _.each(libraryPreps, function (libraryPrep) { %> 
        <option value="<%=libraryPrep.id%>"><%= libraryPrep.name %></option> 
        <% }); %> 
        <% } %> 
       </select> 

, 내 템플릿 렌더링을하지 않고 나는 libraryPreps이 정의되지 콘솔에 오류가 발생합니다 : 내 템플릿에서 나는 이런 식으로 사용합니다. 내 템플릿에서 정의되지 않은 템플릿이 잘못 검사됩니까? 내 백본 모달보기에서 같은 방식으로 검사하는 것처럼 느껴지지만 실제로는 내 실제 서식 파일에서 작동하지 않는 것 같습니다. 템플릿 표기법이 정확합니까? 감사.

답변

28

변수를 함수에 전달하는 경우 평가가 진행되고 해당 변수가 없으므로 오류가 발생합니다. 대조적으로 백본보기에서는 항상 작동하는 개체의 속성에 액세스하고 있습니다 (해당 이름의 속성이없는 경우 undefined 값을 반환 함).

대신, 당신도 선언되지 않은 변수를 작동 그것에 typeof 연산자를 사용해야합니다 (A variable === undefined vs. typeof variable === "undefined"보고 JavaScript check if variable exists (is defined/initialized)이) :

<select id="libraryPreps"><% 
    if (typeof libraryPreps !== "undefined") { 
     _.each(libraryPreps, function (libraryPrep) { %> 
      <option value="<%=libraryPrep.id%>"><%= libraryPrep.name %></option><% 
     }); 
    } 
%></select> 

템플릿에 _.isUndefined를 사용하려면를, 당신 ' 템플릿에서 값을 명시 적으로 사용할 수 있도록해야합니다. the docs에서 : template 곳 값들이 with 문을 통해 로컬 범위에서 데이터에서 기본적으로

. 그러나 variable 설정으로 단일 변수 이름을 지정할 수 있습니다. 이렇게하면 템플릿을 렌더링 할 수있는 속도가 크게 향상 될 수 있습니다.

_.template("Using 'with': <%= data.answer %>", {answer: 'no'}, {variable: 'data'}); 
=> "Using 'with': no" 

그래서, 당신은 다음과 같이 템플릿을 작성할 수 있습니다

대신 : if (typeof libraryPreps !== "undefined") {

<% if (!_.isUndefined(data.libraryPreps)) { %> … 
<% if ("libraryPreps" in data) { %> … 
0

나는 비슷한 문제가 있었다, 나는 다음과 같은 해결책을 발견

사용 : if (!_.isUndefined(obj.libraryPreps)) {