2015-05-08 6 views
1

У меня есть контекст шаблона данных, как это:Как проверить пустой объект в шаблоне Meteor?

data = { 
    "attribute1": { 
     "attribute2": {} 
    } 
} 

И в шаблоне метеора я делаю что-то вроде этого:

{{#with attribute1}} 
    {{#if attribute2}} 
     show some content 
    {{/if}} 
{{/with}} 

Я не хочу, чтобы показать что-нибудь, если attribute2 пустая объект. Однако я попробовал как {{#with attribute2}}{{/with}}, так и {{#if attribute2}}{{/if}} И он все равно отображает содержимое внутри, даже если это пустой объект.

Каков правильный способ проверить, является ли объект пустым в шаблоне пробела? Или это даже возможно?

+0

Если вы используете метеорит с lodash, вы можете сделать что-то вроде '#if_.isEmpty (data [" attribute2 "])' или '#if data [" attribute2 "]. Length> 0' –

ответ

1

Я просто нашел способ зарегистрировать помощник шаблона и использовать jQuery.isEmpty сделать проверку нулевой:

Template.registerHelper("isEmpty", function (object) { 
    return jQuery.isEmpty(object); 
}); 

И использовать его в шаблоне:

{{#unless isEmpty attribute2}} 
    show some content 
{{/unless}} 

B ut Я нашел недостаток этого решения, что, если я хочу ссылаться на атрибуты внутри атрибута2, мне нужно будет добавить {{#with attribute2}}{{/with}} внутри блока, если блок

+0

Это может быть недостаток должен добавить '{{#with attribute2}} {{/ with}}' внутри блока 'except', но это единственный способ, с помощью которого вы можете переключить контекст кодового блока внутри' { {#with attribute1}} {{/ with}} 'в том же шаблоне, если только вы не должны были отображать содержимое информации внутри внутреннего' {{#with}} 'блока, определенного в отдельном шаблон, а затем передал значение объекта атрибута2 этому шаблону, чтобы установить его контекст данных как 'attribute2', например:' {{#unless isEmpty attribute2}} {{> templateName attribute2}} {{/ except}} ' , – n4tiv3pwnst4r

0

если attribute2 является объектом, вы можете использовать Object.keys, чтобы проверить длину

{{#with attribute1}} 
    {{#if !!Object.keys(attribute2).length}} 
     show some content 
    {{/if}} 
{{/with}} 
0

Причина, по которой ваш исходный код не работает, заключается в том, что вы считаете, что пустой объект равен false в пробелах. Как упоминалось в документации Spacebars here, только ложные значения Javascript (null, undefined, 0, "" и false) будут считаться ложными по пробелам. Таким образом, пустой объект нужно проверить с помощью метода вспомогательного метода Meteor, как и ваш принятый ответ.