|
|
@@ -0,0 +1,50 @@ |
|
|
|
|
|
# Migrating Guide |
|
|
|
|
|
|
|
|
|
|
|
## Moving to mustache.js v2 |
|
|
|
|
|
|
|
|
|
|
|
### Overview |
|
|
|
|
|
|
|
|
|
|
|
mustache.js v2 introduces a bug fix that breaks compatibility with older versions: fixing null and undefined lookup. |
|
|
|
|
|
|
|
|
|
|
|
When mustache.js tries to render a variable `{{name}}`, it executes a `lookup` function to figure out which value it should render. This function looks up the value for the key `name` in the current context, and if there is no such key in the current context it looks up the parent contexts recursively. |
|
|
|
|
|
|
|
|
|
|
|
Value lookup should stop whenever the key exists in the context. However, due to a bug, this was not happening when the value was `null` or `undefined` even though the key existed in the context. |
|
|
|
|
|
|
|
|
|
|
|
Here's a simple example of the same template rendered with both mustache.js v1 and v2: |
|
|
|
|
|
|
|
|
|
|
|
Template: |
|
|
|
|
|
```mustache |
|
|
|
|
|
{{#friends}} |
|
|
|
|
|
{{name}}'s twitter is: {{twitter}} |
|
|
|
|
|
{{/friends}} |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
View: |
|
|
|
|
|
```json |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "David", |
|
|
|
|
|
"twitter": "@dasilvacontin", |
|
|
|
|
|
"friends": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "Phillip", |
|
|
|
|
|
"twitter": "@phillipjohnsen" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "Jan", |
|
|
|
|
|
"twitter": null |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Rendered using mustache.js v1: |
|
|
|
|
|
```text |
|
|
|
|
|
Phillip's twitter is: @phillipjohnsen |
|
|
|
|
|
Jan's twitter is: @dasilvacontin |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Rendered using mustache.js v2: |
|
|
|
|
|
```text |
|
|
|
|
|
Phillip's twitter is: @phillipjohnsen |
|
|
|
|
|
Jan's twitter is: |
|
|
|
|
|
``` |