В Handlebars вы можете написать код, подобный этому
{{ object.world.entity.person.level}}
И вы не получите никакой ошибки. Если объект не существует, он просто не будет ничего печатать и двигаться дальше, то же самое со всеми свойствами. Так что это отлично подходит для быстрой разработки и создания бессхемных баз данных, где объект может существовать или не существовать. Объект не может быть определен, и если он определен, свойство может быть неопределенным. Но мораль в том, что если что-то не так, он просто ничего не печатает и движется вперед.
Мне нравится EJS, потому что у вас больше контроля над кодом, и это проще, когда вы хотите написать быструю логику, которая не нуждается в помощнике.
Но если вы хотите сослаться на что-то, это может привести к множеству ошибок. Так, например, эквивалент приведенного выше кода будет следующим.
<% if (typeof(object) !== 'undefined' && object.world && object.world.entity && object.world.entity.person && object.world.entity.person.level) { %>
<%= object.world.entity.person.level %>
<% } %>
Как вы можете видеть, второй гораздо менее читабелен и невероятно раздражает, особенно когда вы пытаетесь достичь того же результата.
У меня вопрос, есть ли способ предотвратить такую ошибку? Я знаю, что вы можете создать помощника и сделать что-нибудь, например.
<%if (typeof(object) !== 'undefined' &&
helper.isDefined(object.world.entity.person.level)) {
<%= object.world.entity.person.level %>
<% } %>
Но даже это громоздко, когда вы хотите написать быстрый код. Так есть ли способ просто сделать что-то вроде
<%= object.world.entity.person.level %>
Текущий фреймворк, который я использую Sails.JS framework