проверка неопределенной переменной в шаблоне подчеркивания

Этот код выполнит вашу потребность:

   FileWriter fw=new FileWriter("C:\\file.json",true);
   fw.write("ssssss");
   fw.close();
17
задан Crystal 7 June 2013 в 05:56
поделиться

3 ответа

Если вы передаете переменную в функцию, она оценивается и выдает ошибку, поскольку такой переменной нет. Напротив, в вашем базовом представлении вы обращаетесь к свойству объекта объекта, который будет всегда работать (и возвращать значение undefined, если свойства с таким именем не существует).

Вместо этого вам придется использовать оператор typeof, который будет работать даже для необъявленных переменных (посмотрите на переменную === undefined против переменной typeof === & quot; undefined & quot; и JavaScript проверяет, существует ли переменная (определена / инициализирована) ):

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

Чтобы использовать _.isUndefined в вашем шаблоне, вам нужно сделать значение явно доступным в шаблоне. Из документов :

По умолчанию template помещает значения из ваших данных в локальную область с помощью оператора with. Однако вы можете указать одно имя переменной с настройкой variable. Это может значительно повысить скорость, с которой шаблон может отображаться.

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

Таким образом, вы можете написать шаблоны так:

 <% if (!_.isUndefined(data.libraryPreps)) { %> …
 <% if ("libraryPreps" in data) { %> …
30
ответ дан Community 7 June 2013 в 05:56
поделиться

У меня была похожая проблема, я нашел следующее решение:

Вместо: if (typeof libraryPreps !== "undefined") {

Использование: if (!_.isUndefined(obj.libraryPreps)) {

0
ответ дан nickel715 7 June 2013 в 05:56
поделиться

Я знаю, что это связано со старым потоком. Но эта проблема все еще остается активной.

Я создал решение для своего собственного стека. Может быть полезным для других программистов.

Этот код проверяет, являются ли переменные неопределенными или нулевыми. В случае, если переменные не определены или имеют значение null, возвращается имя переменной. (С синтаксисом шаблона).

Это изменение проверено на underscorejs v1.6.0. С небольшими изменениями это будет работать до 1.9.1. Далее смотрим на Лодаш. Это будет работать с незначительными корректировками!

В сборке разработчика подчеркивания:

v1.6.0 правило: 1239

Правило более новых версий: 1575

Старый код:

if (escape) {
  source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
}
if (interpolate) {
  source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
}
if (evaluate) {
  source += "';\n" + evaluate + "\n__p+='";
}

Новый код:

if (escape) {
    source += "'+\n((typeof " + escape + " === \"undefined\" || " + escape + " === null) ? \"<%-" + (escape.toString()) + "%>\": _.escape(" + escape + "))+\n'";
}
if (interpolate) {
    source += "'+\n((typeof " + interpolate + " === \"undefined\" || " + interpolate + " === null) ? \"<%=" + (interpolate.toString()) +"%>\":" + interpolate + ")+\n'";
}
if (evaluate) {
    source += "';\n" + evaluate + "\n__p+='";
}
0
ответ дан Ivo 7 June 2013 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: