Ограничьте количество символов, отображаемых тегом Mustache.js. - PullRequest
2 голосов
/ 13 января 2012

Есть ли в Mustache какой-либо способ ограничения количества символов, которые генерирует тег Mustache?

например

template = "<li>{{my_tag}}</li>"

data = {
    "my_tag" : "A very long string that needs to be abbreviated to fit into the available space."
}

Теперь, когда я отображаю свой тег, я хочу сократить длинную строку допоказывая только первые 10 символов с последующим многоточием.Я рассмотрел использование лямбда-функции (как описано в документации по Mustache) примерно так ...

template = "<li>{{#limitLength}}{{my_tag}}{{/limitLength}}</li>"

data = {
    "limitLength" : function() {
        return function(text) {
          return text.substr(0,10) + '...';
        }
      },
    "my_tag" : "A very long string that needs to be abbreviated to fit into the available space."
}

, но, к сожалению, тег {{my_tag}} не раскрывается.В руководстве «Усы» говорится:

Переданный текст является буквенным блоком без разметки.{{tags}} не будет расширен - лямбда должна делать это самостоятельно.

.. но я не могу представить, как это сделать без использования функции Mustache.to_html ()и когда я пытаюсь использовать его так ...

например,

data = {
    "limitLength" : function() {
        return function(text) {
          return Mustache.to_html(text,data).substr(0,10) + '...';
        }
      },
     "my_tag" : "A very long string that needs to be abbreviated to fit into the available space."
}

... он молча терпит неудачу (возможно, здесь виновато рекурсивное использование объекта данных)

Кто-нибудь знает о каком-либо другом способе достижения этого, не прибегая к функции javascript / jQuery, я хотел бы реализовать его, просто используя Mustache, если это возможно.

1 Ответ

7 голосов
/ 13 января 2012

Ваша функция на самом деле вызывается с двумя аргументами: необработанный текст и render функция, которую можно использовать для визуализации вашего текста, сохраняя текущий контекст.

data = {
    "limitLength" : function() {
        return function(text, render) {
          return render(text).substr(0,10) + '...';
        }
      },
     "my_tag" : "A very long string that needs to be abbreviated to fit into the available space."
}
...