2013-06-15 2 views
2

Я пытаюсь форматировать объект JS Date() с помощью момента.js с усами, однако усы не передают оценочное значение в функцию.Усы не оценивают {{}} внутри функции

В связи магистральная:

render: function() { 
    var user = this.user.toJSON(); //model 

    _.extend (user, {formatLastLoginAt: this.formatLastLoginAt}); 

    var rendered = mustache.render (template, user); 
    this.$el.html (rendered); 

    return this; 
}, 

formatLastLoginAt: function() { 
    return function (lastLoginAt) { 
    return moment (lastLoginAt).format ('Do MMMM YYYY'); 
    } 
} 

пользовательского объекта привязки: user object before pass to mustache

В шаблоне:

{{#lastLoginAt}} 
    <tr> 
    <td>Last Login:</td> 
    <td>{{#formatLastLoginAt}}{{lastLoginAt}}{{/formatLastLoginAt}}</td> 
    </tr> 
{{/lastLoginAt}} 

moment.js дает NaN ошибку как пропуск 'lastLoginAt' в качестве символьной строки «{ {lastLoginAt}} ", а не его значение Date().

Пробовал с moment().format(), он работает. Таким образом, конструкция лямбда должна быть нормально, и {{#lastLoginAt}} не пуст.

Все, что я пропустил? Цените свой совет. Спасибо.

+0

Лямбда не дают сырые значения. Они могут дать вам рендеринг внутреннего раздела, хотя вы можете разобрать, чтобы восстановить исходное значение ... Не совсем практично, но это лучшее, что вы можете сделать с этим инструментом. Некоторые другие реализации Mustache на других языках более удобны и позволяют создавать лямбда-конструкцию (например, https://github.com/groue/GRMustache/blob/master/Guides/rendering_objects.md) –

ответ

4

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

formatLastLoginAt: function() { 
    return function (lastLoginAt, render) { 
    lastLoginAt = render(lastLoginAt); // expand variable 
    return moment (lastLoginAt).format ('Do MMMM YYYY'); 
    } 
} 
+0

Абсолютно верно! Большое спасибо. –

Смежные вопросы