Handlebars.js: рдкреНрд░рддреНрдпреЗрдХ рд╕рд╣рд╛рдпрдХ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕ рддреНрд░реБрдЯрд┐: "рдЖрдИрдбреА" рдХреА рдЕрдкреЗрдХреНрд╖рд╛, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЧрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рдЬреВрди 2012  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: handlebars-lang/handlebars.js

рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

рдзреНрдпрд╛рди рдореЗрдВ рди рдЖрдпрд╛ рддреНрд░реБрдЯрд┐: рдкрдВрдХреНрддрд┐ 3 рдкрд░ рдкрд╛рд░реНрд╕ рддреНрд░реБрдЯрд┐:
{{ #рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ }} -------^
'рдЖрдИрдбреА' рдХреА рдЕрдкреЗрдХреНрд╖рд╛, 'рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд' рд╣реЛ рдЧрдпрд╛

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдареАрдХ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЧреИрд░-рдореБрджреНрд░рдг рд╡рд░реНрдгреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рдЗрдВрдЬрди рдиреЗ }} рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рди рд░рдЦрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ {# рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдЧ}} рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рдмрд╛рд░реНрд╕ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред

      source = $("#people-in-clients-template").html();
      source = source.replace(/ }}/g, "}}");
      source = source.replace(/{{ /g, "{{");

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@ustun , рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдбреАрдмрдЧ рдХрд░

@wagenet рддреЗрдЬрд╝ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐, рдореИрдВ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рд╕рд░рд▓ #рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдЬреИрд╕рд╛ рд╣реА рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ jsfiddle рдореЗрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдХреНрд░реЛрдо рдХрдВрд╕реЛрд▓ рдкрд░ рднреА рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, html() рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдиреНрдпреВрд▓рд╛рдЗрди рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдпрд╣рд╛рдБ рдХрдВрд╕реЛрд▓ рд╕рддреНрд░ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЯреЗрдореНрдкреНрд▓реЗрдЯ = $ ("# рд▓реЛрдЧ-рдЗрди-рдХреНрд▓рд╛рдЗрдВрдЯ-рдЯреЗрдореНрдкрд▓реЗрдЯ")ред html ()
"

{{ #each people }}
<li>{{ this }}</li>
{{ /each }}

"
t = Handlebars.compile(template);
function (context, options) {
    if (!compiled) {
      compiled = compile();
    }
    return compiled.call(this, context, options);
  }
t({"people": ['foo','bar']})
Error: Parse error on line 3: {{ #each people }}<li> ---^ Expecting 'ID', got 'undefined'

рдЕрдм рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

template = "{{#each people }}<li>{{ this}}</li>{{/each}}"
"{{#each people }}<li>{{ this}}</li>{{/each}}"
t = Handlebars.compile(template);
function (context, options) {
    if (!compiled) {
      compiled = compile();
    }
    return compiled.call(this, context, options);
  }
t({"people": ['foo','bar']})
"<li>foo</li><li>bar</li>"

html() рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЯреНрд░рд┐рдо рдХрд░рдиреЗ рд╕реЗ рднреА рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП,

  template = $.trim($("#people-in-clients-template").html())
"

{{ #each people }}
<li>{{ this }}</li>
{{ /each }}

"
t = Handlebars.compile(template);
function (context, options) {
    if (!compiled) {
      compiled = compile();
    }
    return compiled.call(this, context, options);
  }
t({"people": ['foo','bar']})
Error: Parse error on line 3: {{ #each people }}<li> ---^ Expecting 'ID', got 'undefined'

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдХреБрдЫ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рд╣реИ:

    template = "{{#each people }}<li>{{ this}}</li>{{/each}}"
"{{#each people }}<li>{{ this}}</li>{{/each}}"
/[\x00-\x1F]/.test(template)
false
template = $("#people-in-clients-template").html()
"

{{ #each people }}
<li>{{ this }}</li>
{{ /each }}

"
/[\x00-\x1F]/.test(template)
true

рдпрд╣ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЪрд╛рд░рдХреЛрдб рд╣реИрдВ:

рдП = [10, 10, 123, 123, 32, 35, 101, 97, 99, 104, 32, 112, 101, 111, 112, 108, 101, 32, 125, 125, 10, 123, 123, 32 , 116, 104, 105, 115, 32, 125, 125, 10, 123, 123, 32, 47, 101, 97, 99, 104, 32, 125, 125, 10, 10]

рдмреА = "";

рдХреЗ рд▓рд┐рдП (i = 0; i <a.length; i++) {
b += String.fromCharCode(a[i]);
}

рдЯреА = рдЯреЗрдореНрдкрд▓реЗрдЯ ({"рд▓реЛрдЧ: ['рдлреВ', 'рдмрд╛рд░']});

рдпрд╣рд╛рдВ рдЬреЗрдПрд╕рдлрд╝рд┐рд▓реНрдб рд╣реИ:

http://jsfiddle.net/8nugY/

рдареАрдХ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЧреИрд░-рдореБрджреНрд░рдг рд╡рд░реНрдгреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рдЗрдВрдЬрди рдиреЗ }} рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рди рд░рдЦрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ {# рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдЧ}} рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рдмрд╛рд░реНрд╕ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред

      source = $("#people-in-clients-template").html();
      source = source.replace(/ }}/g, "}}");
      source = source.replace(/{{ /g, "{{");

рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рдмрдирд╛рдо рдЦрд░рд╛рдм рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jlubean picture jlubean  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nknapp picture nknapp  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amirzandi picture amirzandi  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

asgraf picture asgraf  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rhariraman picture rhariraman  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ