Получение длины массива, возвращаемого функцией в Mustache.js - PullRequest
0 голосов
/ 19 февраля 2019

Я уже зарегистрировал его как проблему , но у меня есть следующий вариант использования, который 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

...