Please refer to this jsfiddle: http://jsfiddle.net/7ywsdydr/ .
Base on #1028 , when a block customhelper execute options.fn(this) , the context stack should not be pushed.
Here is test 1 to confirm the behavior:
Not inside #each:
1.IF: {{#if true}}{{name}}-{{../name}}-{{../../name}}-{{../../../name}}{{/if}}
2.MYIF: {{#myif true}}{{name}}={{../name}}={{../../name}}={{../../../name}}{{/myif}}
3.MYWITH: {{#mywith true}}{{name}}~{{../name}}~{{../../name}}~{{../../../name}}{{/mywith}}
The input data is:
{
"name": "John",
"array": [1]
}
The test 1 output is:
Not inside #each:
1.IF: John---
2.MYIF: John===
3.MYWITH: ~John~~
Compare output 1.IF and 2.MYIF we can know the context is not changed when inside the {{#if}} or {{#myif}} block. The {{#myif}} helper is defined as:
Handlebars.registerHelper('myif', function(conditional, options) {
if (conditional) {
return options.fn(this);
} else {
return options.inverse(this);
}
});
Which almost same with {{#if}}. But, when this test be placed into a {{#each}} :
Inside #each:
{{#each array}}
1.IF: {{#if true}}{{name}}-{{../name}}-{{../../name}}-{{../../../name}}{{/if}}
2.MYIF: {{#myif true}}{{name}}={{../name}}={{../../name}}={{../../../name}}{{/myif}}
3.MYWITH: {{#mywith true}}{{name}}~{{../name}}~{{../../name}}~{{../../../name}}{{/mywith}}
{{/each}}
Output will be:
Inside #each:
1.IF: -John--
2.MYIF: ==John=
3.MYWITH: ~~John~
Note on difference between 1.IF and 2.MYIF . The issue is: when {{#if}} do not change the context, in the same time {{#myif}} changed the context. Why?
Please refer to this jsfiddle: http://jsfiddle.net/7ywsdydr/ .
Base on #1028 , when a block customhelper execute options.fn(this) , the context stack should not be pushed.
Here is test 1 to confirm the behavior:
The input data is:
The test 1 output is:
Compare output 1.IF and 2.MYIF we can know the context is not changed when inside the {{#if}} or {{#myif}} block. The {{#myif}} helper is defined as:
Which almost same with {{#if}}. But, when this test be placed into a {{#each}} :
Output will be:
Note on difference between 1.IF and 2.MYIF . The issue is: when {{#if}} do not change the context, in the same time {{#myif}} changed the context. Why?