Mustache.js: рд╡рд╕реНрддреБ рдХреБрдВрдЬреА/рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдордИ 2015  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: janl/mustache.js

рдХреНрдпрд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдХреБрдВрдЬреА/рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

var values = {
  'single': 'Single bed',
  'double': 'Double bed',
  'twin': 'Twin beds'
};

рд╕рдорддреБрд▓реНрдп рд╣реИрдВрдбрд▓рдмрд╛рд░.рдЬреЗрдПрд╕ рдХреЛрдб:

<select name="bed_type">
{{#values}}
  <option value="{{@key}}">{{this}}</option>
{{/values}}
</select>

рдореБрдЭреЗ рдЗрд╕реЗ рдореВрдВрдЫреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛

рдзрдиреНрдпрд╡рд╛рджред

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

рдХреНрдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрдВрдЫреЛрдВ рдХреЗ рджреГрд╢реНрдп рдореЗрдВ рддрд░реНрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореЗрд░рд╛ рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВ рддрд░реНрдХ-рд░рд╣рд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкреБрди: рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдУрдкреА рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЕрдЬреАрдм рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рдбреЗрдЯрд╛ рд╣реЛ:

"attr": {
  "class": "foo",
  "href": "/somewhere"
}

рд▓реЗрдХрд┐рди рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

"attr": [
  {
    "key": "class",
    "value": "foo"
  },
  {
    "key": "href",
    "value": "/somewhere"
  }
]

рд╕реМрдВрдкрдиреЗ рдХреЗ рд▓рд┐рдП:

<a{{#attr}} {{ key }}="{{ value }}"{{/attr}}></a>

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

рд╣рд╛рдп @chlab!

рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ рд░реЗрдВрдбрд░рд░ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдЗрд╕реЗ view рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛ рдПрдХ рдХрд╕реНрдЯрдо рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрди рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдереНрд░реЗрдбреНрд╕ рдкрд░ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ:

http://stackoverflow.com/questions/9058774/handlebars-mustache-is-there-a-built-in-way-to-loop-through-the-properties-of
http://stackoverflow.com/questions/9981907/how-to-iterate-over-a-hash-in-mustache-js

рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдЪреАрдпрд░реНрд╕!

рдзрдиреНрдпрд╡рд╛рдж @dasilvacontinред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдирд╣реАрдВ? рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рддрд░реНрдХ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╣реИрдВрдбрд▓рдмрд╛рд░ рдХрд╛ рддрд░реАрдХрд╛ рдЬреНрдпрд╛рджрд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛?
рдЪрд┐рдпрд░реНрд╕

@chlab рдпрд╣ рдореВрдВрдЫреЛрдВ рдХрд╛ рдПрдХ рдореМрд▓рд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИред рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЕрдзрд┐рдХ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдереЛрдбрд╝рд╛ рд╕рд╛ рддрд░реНрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдлрд┐рд╕рд▓рди рдврд▓рд╛рди рд╣реИ рдХрд┐ рдореВрдВрдЫреЗрдВ рдЖрдкрдХреЛ рдиреАрдЪреЗ рдЬрд╛рдиреЗ рднреА рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВ :)

рдХрд╛рдлреА рдЙрдЪрд┐рддред рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдЬрд┐рд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореВрдВрдЫреЛрдВ рдХреЛ рднреА рдЕрдзрд┐рдХ рд░рд╛рдп рджреЗрддрд╛ рд╣реИ, рдореИрдВ рд╣рдореЗрд╢рд╛ рдореВрдВрдЫ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд░реВрдкрд╛рдВрддрд░рдг рдЪрд░рдг рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ ...

рдХреНрдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрдВрдЫреЛрдВ рдХреЗ рджреГрд╢реНрдп рдореЗрдВ рддрд░реНрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореЗрд░рд╛ рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВ рддрд░реНрдХ-рд░рд╣рд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкреБрди: рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдУрдкреА рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЕрдЬреАрдм рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рдбреЗрдЯрд╛ рд╣реЛ:

"attr": {
  "class": "foo",
  "href": "/somewhere"
}

рд▓реЗрдХрд┐рди рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

"attr": [
  {
    "key": "class",
    "value": "foo"
  },
  {
    "key": "href",
    "value": "/somewhere"
  }
]

рд╕реМрдВрдкрдиреЗ рдХреЗ рд▓рд┐рдП:

<a{{#attr}} {{ key }}="{{ value }}"{{/attr}}></a>

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

рдореИрдВ рдПрдХ рдЕрдирд╛рдо рд╕реВрдЪреА рдХреЛ рдХреИрд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдореИрдВрдиреЗ {{#.}} рдФрд░ {{/.}} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рд╡рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж

рдПрдХ рдЕрдирд╛рдо рд╕реВрдЪреА рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

let facts = doc.data(); res.render('index', {facts});

<ul> {{#each facts}} <li>Key: {{@key}} Value = {{this}}</li> {{/each}} </ul>

рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╣реИ?

рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреА рдЕрдирд╛рдо рд╕реВрдЪреА рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?

рдХреГрдкрдпрд╛ рд╕реБрдЭрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ, var values = { 'single': 'Single bed', ...} рдФрд░ рдкреНрд░рд╢реНрди рдХреЗ рд╕реБрдЭрд╛рдП рдЧрдП рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдПрдВред

рдкреБрдирд╢реНрдЪ: @ prashantcs8 рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ? рдХрд╛рдо рдирд╣реАрдВ рдХрд░ред

@chlab рд╣рдо 2018 рдореЗрдВ рд╣реИрдВ ... рдЕрдирд╛рдо рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрдВрдЫреЛрдВ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ?

@baseten , рдпреЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рд▓реЗрдХрд┐рди рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" рдКрдкрд░ , рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдбреЗрдЯрд╛-рд╕рдВрд░рдЪрдирд╛ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд╕реВрд░рдд рд╣реИ ...

рдпрд╣ рдПрдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ res.render('index', objs2list(obj)) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рд╢рд╛рдпрдж рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрдВрдЫ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рд╣реИ,

function objs2list(p) {
  r = [];
  for (var key in p) if (p.hasOwnProperty(key)) {
    r.push({"@key":key,"@val":p[key]});
  }
  return r;
}

рдореМрдЬреВрдж?

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

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

zekth picture zekth  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Immortalin picture Immortalin  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ForbesLindesay picture ForbesLindesay  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

SmasherHell picture SmasherHell  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MatthijsZw picture MatthijsZw  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ