2015-12-25 3 views
0

Я пробегаем по документам в шаблоне с Blaze spacebars, чтобы создать списокМетеор {{#if}} хелпер, если объект или поле существует

<template name="objectTemplate"> 
    {{#if checkIfObjectExists}} 
    ({{document.[0].object.object1}}) 
    {{/if}} 
</template> 

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

Я создал помощник, но не работал. Я пробовал null, 0, typeOf и т. Д. И все еще не могу понять это правильно. Во всяком случае здесь хелперный

Template.objectTemplate.helper ({ 
checkIfObjectExists: function() { 
if (this !== 'null') { 
    return true; 
    } else { 
    return false; 
    } 
} 
});` 
+0

Дайте нам больше кода. Из того, что я вижу здесь, вы проверяете, является ли шаблон нулевым (это будет шаблон). – fabien

+0

спасибо. Я четко заявил, что код ниже был помощником шаблона, но никогда не помешало добавить больше ясности. – user3795286

+0

Я действительно имел в виду «больше кода». Когда вызывается «objectTemplate». Но я отвечу. – fabien

ответ

0

Вы можете использовать _.has(object, key) если вы хотите проверить, если объект document.[0].object обладает свойством object1 набора. Функция _.isObject(value) проверит вместо этого, если document.[0].object.object1 является Object (сюда также входят массивы).

Таким образом, в зависимости от ваших требований, ваши помощники шаблона должны выглядеть следующим образом:

Template.objectTemplate.helper({ 
    checkIfObjectPropertyExists: function() { 
     return _.has(this.document[0].object, "object1"); 
    }, 
    checkIfPropertyIsObject: function() { 
     return _.isObject(this.document.[0].object.object1); 
    } 
}); 

Вы также можете зарегистрировать Underscore.js глобального помощник шаблон, а затем использовать его непосредственно в шаблонах Метеора:

Template.registerHelper('_', function() { 
    return _; 
}); 

<template name="objectTemplate"> 
    {{#if _.has this.document.[0].object 'object1'}} 
     ({{document.[0].object.object1}}) 
    {{/if}} 
</template> 
+0

Спасибо, Маттиас. Этот ответ был очень полезен! – user3795286

0

Ваш if не в нужном месте. Ваш objectTemplate, вероятно, называется именно так:

{{#each datum in data}} 
    {{>objectTemplate data=data}} 
{{/each}} 

Таким образом, это всегда оказаны. Даже если базовая точка пуста. , который вы проверите в своем помощнике, всегда будет правдой, это сам шаблон.

Таким образом, вы должны назвать это таким образом:

{{#each datum in data}} 
    {{#if datum.thingToTest}} 
     {{>objectTemplate datum=datum}} 
    {{/if}} 
{{/each}} 

Весь шаблон к югу не будет называться.

+0

Спасибо. ОбъектTemplate вызывается в другой шаблон, который выполняет итерацию с помощью {{#each}}. Когда объект1 из {{document. [0] .object.object1}} существует, значения отображаются. Все работает, кроме. У меня есть те скобки «()», которые не являются динамическими, поэтому я хотел бы построить оператор if, который будет отображать результаты, если они существуют, и ничего, если нет. – user3795286