2013-06-07 38 views
16

tanımsız değişken için denetleme Bu gibi benim şablonda libraryPrep nesnelerin kalıcı bir görünümünü göstermektedir. Bir libraryPreps nesnesi olmadığındaçizgi şablona

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

, benim şablon işlemek için alamadım ve ben libraryPreps tanımsız konsolda bir hata alıyorum: şablonumun, ben böyle kullanıyorum. Şablonumda yanlış tanımlanmamış mıyım? Omurgamın model görünümünde de aynı şekilde kontrol ettiğimi hissediyorum, ancak bir nedenden dolayı, gerçek şablonumda işe yaramıyor gibi görünüyor. Şablon gösterimi doğru mu? Teşekkürler.

cevap

28

Değişkeni bir işleve iletiyorsanız, değerlendirilir ve böyle bir değişken olmadığından bir hata verir. Omurga görünümünüzde, bunun tersine, her zaman çalışacak bir nesnenin özelliğine erişirsiniz (ve bu isimde bir özellik yoksa undefined değerini döndürürsünüz).

Bunun yerine, hatta bildirilmemiş değişkenler için çalışacak Üzerinde typeof operatörü kullanmak zorunda kalacak (bir variable === undefined vs. typeof variable === "undefined" bakmak ve JavaScript check if variable exists (is defined/initialized) var):

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

Şablonunuzdaki _.isUndefined kullanmak için,' d şablonda açıkça mevcut olan değeri yapmak gerekir. the docs Gönderen: template yerler değerleri with deyimi üzerinden yerel kapsamında Verilerinizden Varsayılan olarak

. Ancak, variable ayarıyla tek bir değişken adı belirtebilirsiniz. Bu, bir şablonun işleyebileceği hızı önemli ölçüde artırabilir.

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

Bu özelliği ve böyle şablonları yazabilirsiniz:

yerine: if (typeof libraryPreps !== "undefined") {

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

Ben benzer bir sorun vardı, ben şu çözüm buldu

Kullanın: if (!_.isUndefined(obj.libraryPreps)) {

İlgili konular