Je commence juste avec handlebars
et j'essaye de faire un simple double pour boucler afin d'avoir tout le temps du jour avec 15 intervalles de minutes. Une chose très étrange se produit où si l'enfant et le parent ont les mêmes valeurs, l'objet view
est renvoyé à la place. Ceci est mon code:../ceci retourne l'objet de vue à l'intérieur de la boucle interne quand le parent et l'enfant ont la même valeur
var handlebarsExpress = require('express-handlebars').create({
helpers: {
for: function(from, to, incr, block) {
var accum = '';
for(var i = from; i <= to; i += incr) {
accum += block.fn(i);
}
return accum;
}
}
});
app.engine('handlebars', handlebarsExpress.engine);
app.set('view engine', 'handlebars');
...
...
Dans le fichier de vue (sth.handlebars
) J'ai ceci:
<div class="row columns large-12">
{{#for 0 23 1}}
{{#for 0 45 15}}
{{log ../this}}
<span>{{../this}}:{{this}}</span><br>
{{/for}}
{{/for}}
</div>
La sortie html est quelque chose comme ceci:
[object Object]:0
0:15
0:30
0:45
1:0
...
...
13:45
14:0
14:15
14:30
14:45
15:0
[object Object]:15
15:30
15:45
16:0
16:15
Les rapports aide log
la à la suite dans le terminal:
{ settings:
{ 'x-powered-by': true,
etag: 'weak',
'etag fn': [Function: wetag],
env: 'development',
'query parser': 'extended',
'query parser fn': [Function: parseExtendedQueryString],
'subdomain offset': 2,
'trust proxy': false,
'trust proxy fn': [Function: trustNone],
view: [Function: View],
views: '/home/elsa/Projects/rental-borg/project/views',
'jsonp callback name': 'callback',
'view engine': 'handlebars',
port: 8765 },
flash: { info: undefined, error: undefined },
_locals: { flash: { info: undefined, error: undefined } },
cache: false }
0
0
0
1
1
1
1
2
2
2
2
3
3
3
3
4
...
...
13
13
13
13
14
14
14
14
15
{ settings:
{ 'x-powered-by': true,
etag: 'weak',
'etag fn': [Function: wetag],
env: 'development',
'query parser': 'extended',
'query parser fn': [Function: parseExtendedQueryString],
'subdomain offset': 2,
'trust proxy': false,
'trust proxy fn': [Function: trustNone],
view: [Function: View],
views: '/home/elsa/Projects/rental-borg/project/views',
'jsonp callback name': 'callback',
'view engine': 'handlebars',
port: 8765 },
flash: { info: undefined, error: undefined },
_locals: { flash: { info: undefined, error: undefined } },
cache: false }
15
15
16
16
16
16
...
23
23
23
23
Il est évident que lorsque this
et ../this
sont égaux, ../this
renvoie effectivement quelque chose comme ../../this
qui est l'objet de vue lui-même, je suppose. Cela se produit deux fois dans mon cas spécifique, 00:00 et 15:15.
Est-ce un bug?
EDIT: J'ai résolu le problème avec la nouvelle fonction de paramètres de bloc de Handlebars 3, mais la question initiale demeure. C'est ce que je l'ai fait pour résoudre le problème:
fichier .handlebars
:
{{#for 0 23 1 as |hour|}}
{{#for 0 45 15 as |minute|}}
<span>{{hour}}:{{minute}}</span>
{{/for}}
{{/for}}
et l'aide:
for: function(from, to, incr, block) {
var args = [], options = arguments[arguments.length - 1];
for (var i = 0; i < arguments.length - 1; i++) {
args.push(arguments[i]);
}
var accum = '';
for(var i = from; i <= to; i += incr) {
accum += options.fn(i, {data: options.data, blockParams: [i]});
}
return accum;
},
Super réponse, merci beaucoup, j'étais aussi curieux mais je n'ai pas eu le temps d'enquêter – hakermania