Я уже зарегистрировал его как проблему , но у меня есть следующий вариант использования, который Mustache.js не поддерживает:
У меня есть IIFE, у которого есть метод, которыйвозвращает массив и хочет, чтобы в шаблоне Mustache получить длину этого возвращаемого массива.
Я попробовал все следующее:
HTML
<template id=sample-tmpl>
{{#getSelectedData}}{{length}}{{/getSelectedData}}
</template>
<template id=sample-tmpl-no-pound-sign>
{{getSelectedData}}{{length}}
</template>
<template id=sample-tmpl-dot-notation>
{{getSelectedData().length}}
</template>
<template id=sample-tmpl-dot-notation-no-func-invoke>
{{getSelectedData.length}}
</template>
<div id=target></div>
<div id=target-no-pound-sign></div>
<div id=target-dot-notation></div>
<div id=target-dot-notation-no-func-invoke></div>
JS
let data = (function() {
let _somePrivateDummyData = [
{
id : 1,
name : 'bobbert',
toString : () => `My name is ${this.name}`
},
{
id : 2,
name : 'tommy',
toString : () => `My name is ${this.name}`
}
]
_somePrivateDummyData.forEach((obj) => obj.toString.bind(obj))
/* a whole bunch of business logic irrelevant to this MVCE */
return {
getSelectedData : () => _somePrivateDummyData.slice()
/* a smorgasboard of other exposed methods, irrelevant to this MVCE */
}
})()
const versions = [
'',
'-no-pound-sign',
'-dot-notation',
'-dot-notation-no-func-invoke'
]
for (let version of versions) {
document.querySelector(`#target${version}`)
.innerHTML = Mustache.render(document.querySelector(`#sample-tmpl${version}`).innerHTML,
data)
}
Ничего из этого не работает!
Ожидаемый результат для любого из них: 2
Факт: [result of toString()], 0, whitespace