В чем преимущество шаблона без логики (например, усы)? - PullRequest
96 голосов
/ 09 октября 2010

Недавно я столкнулся с усами , которые, как утверждается, Шаблон без логики .

Однако, нет никакого объяснения, почему он разработан в Logic-меньше пути.Другими словами, в чем преимущество шаблона без логики?

Ответы [ 13 ]

1 голос
/ 15 февраля 2014

Я согласен с Брэдом: стиль underscore легче понять.Но я должен признать, что синтаксический сахар может не понравиться всем.Если _.each несколько сбивает с толку, вы можете использовать традиционный цикл for.

  <% for(var i = 0; i < items.length; i++) { %>
    <%= items[i] %>
  <% } %>

Всегда хорошо, если вы можете использовать стандартные конструкции, такие как for или if.Просто используйте <% if() %> или <% for() %>, в то время как Mustache используйте несколько неологизм для if-then-else (и сбивает с толку, если вы не читали документацию):

{{#x}}
  foo
{{/x}}
{{^x}}
  bar
{{/x}}

Движок шаблонов хорош, когда вы можете достичьлегко вложенные шаблоны (стиль underscore):

<script id="items-tmpl" type="text/template">
    <ul>
        <% for(var i = 0; i < obj.items.length; i++) { %>
            <%= innerTmpl(obj.items[i]) %>
        <% } %>
    </ul>
</script>

<script id="item-tmpl" type="text/template">
    <li>
        <%= name %>
    </li>
</script>

var tmplFn = function(outerTmpl, innerTmpl) {
    return function(obj) {
        return outerTmpl({obj: obj, innerTmpl: innerTmpl});
    };
};

var tmpl = tmplFn($('#items-tmpl').html(), $('#item-tmpl').html());
var context = { items: [{name:'A',{name:'B'}}] };
tmpl(context);

По сути, вы передаете свой внутренний tmpl как свойство вашего контекста.И назовите это соответственно.Sweet:)

Кстати, если единственное, что вас интересует - это механизм шаблонов, используйте отдельную реализацию шаблонов.* только 900 символов при минимизации (4 длинные строки):

https://gist.github.com/marlun78/2701678

1 голос
/ 15 февраля 2014

Вот 3 способа отображения списка с количеством символов.Все, кроме первого и самого короткого, написаны на шаблонных языках без логики.

CoffeeScript (с Reactive Coffee builder DSL) - 37 символов

"#{name}"
ul items.map (i) ->
  li i

Knockout -100 символов

<span data-bind="value: name"/>
<ul data-bind="foreach: items">
   <li data-bind="value: i"/>
</ul>

Руль / Усы - 66 символов

{{name}}:
<ul>
  {{#items}}
    <li>{{.}}</li>
  {{/items}}
</ul>

Подчеркивание - 87 символов

<%- name %>:
<ul>
<% _.each(items, function(i){ %>
  <li><%- i %></li>
<% }); %>
</ul>

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

Очевидно, я не возражаю против того, чтобы «бизнес-логика» (обширные вычисления) не использовалась в шаблонах.Но я думаю, что, предоставив им псевдо-язык для логики отображения вместо языка первого класса, цена будет заплачена.Не просто печатать, а отвратительную смесь переключения контекста, кому-то нужно ее прочитать.

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

0 голосов
/ 15 сентября 2017

Основные преимущества использования шаблонов без логики:

  • Строго обеспечивает разделение вида модели , см. этот документ для деталей (настоятельно рекомендуется)
  • Очень легко понять и использовать , потому что не требуется никакой логики программирования (и знаний!), А синтаксис минимален
  • (особенно усы) переносимый и независимый от языка, может использоваться без изменений практически во всех средах программирования
...