Функция вызова из шаблона Dust

Я разрабатываю простой веб-сайт, где мне нужно получить список объектов из базы данных. Я хотел попробовать nodejs, поэтому, после нескольких дней чтения и тестов, я, наконец, решил использовать эту конфигурацию:

  • Серверная технология: Nodejs + Express
  • Шаблонный движок: Пыль
  • База данных/источник данных: анализ

Я связал все эти вещи, и кажется, что он работает хорошо, но у меня есть первая проблема: мне нужно вызвать функцию из шаблона Dust, это код:

{>layout/}

{<content} <ul="">
 {#photos}
 <li>{photo.get("name")}{~n}</li>
 {/photos}
  
{/content} 
</content}>

но он не работает, потому что он печатает {photo.get("name")} (буквально) вместо того, чтобы печатать имя каждой фотографии. Запрос с Parse работает правильно, так как я могу видеть загруженные объекты через console.log().

Я новичок как с узлами, так и с пылью, поэтому я не уверен, что проблема связана только с пылью. Есть идеи?

1 ответ

У меня нет другого решения, кроме создания помощника:

var dust = require('dustjs-linkedin');

dust.helpers.exec = function(chunk, context, bodies, params) {
 var args = JSON.parse(params.args.replace(/'/g, '"'));
 var object = context.stack.head;

 params.func.split('.').some(function(property) {
 if (typeof(object[property]) === "function") {
 var result = object[property].apply(object, args);
 chunk.write(result);
 return true;
 } else {
 object = object[property];
 return false;
 }
 })

 return chunk;
};

Предположим, что у нас есть следующие данные:

app.get('/dust-test', function(req, res) {

 function Photo(name) {
 var props = {'name': name};

 this.get = function(prop) {
 return props[prop];
 }
 }

 var photos = ['foo', 'bar', 'nanana'].map(function(name) {
 return new Photo(name);
 })

 res.render("dust-test", {
 photo: new Photo('me'),
 photos: photos
 });
});

Применение:

<li>{@exec func="photo.get" args="['name']" /}</li>

{#photo}
 <li>{@exec func="get" args="['name']" /}</li>
{/photo}

<ul>
 {#photos}
 <li>{@exec func="get" args="['name']" /}{~n}</li>
 {/photos}
</ul>

Где args - массив аргументов в формате json (используются одиночные кавычки)

licensed under cc by-sa 3.0 with attribution.