2015-03-06 2 views
0

Собирают вводную YAML поддерживает динамическое создание модели данных в верхней части страницы с рулевой синтаксисеСоздание сложных моделей данных в YAML вводной в Собирают

--- 
myModel : { aFile : <%= fileName %>} 
--- 

<div> 
{{myModel.aFile.someProperty}} 
</div> 

где имя_файл некоторыми JSON-файл. Можно ли манипулировать myModel в YAML, после его создания и до того, как он будет передан в рендеринг. Этот код не работает, но я хотел бы сделать что-то вроде:

--- 
myModel : { aFile : <%= fileName %>} 
myModel 
    aFile 
     someProperty : I was set in header 
--- 

В противном случае, как еще можно динамически генерировать данные в заголовке? Могу ли я вызвать пользовательский помощник и передать свой вывод переменной, еще раз это не работает, но гипотетически:

--- 
myModel : { data: <%= someHelper('fileName') %> } 
--- 
+0

Ты загружая данные из файла с помощью '{aFile: <% = fileName%>}' или ссылаясь на данные, загруженные опцией [Assemble config 'data] (http://assemble.io/docs/options-data.html)? – James

+0

В настоящее время последний. Можно ли вызывать загрузку файла из передней части ямля? –

ответ

0

Вы можете, конечно, сделать это с помощью заказной помощник Рули, что форматирует данные, однако вы хотите.

Gruntfile.js

assemble: { 
    mySite: { 
     options: { 
      helpers: ['source/helpers/**/*.js'] 

источник/хелперы/importJSON.js

(function() { 
    "use strict"; 

    var _ = require("lodash"); 
    var fs = require("fs"); 

    module.exports.register = function(Handlebars, options) { 
     Handlebars.registerHelper("importJSON", function(fileSpec, options) { 
      var customData = JSON.parse(fs.readFileSync(fileSpec, "utf8")); 

      // Do anything to your data here 
      if (customData.color === "blue") { 
       customData.color = "yellow"; 
      } 

      _.extend(this, customData); 
      return ""; 
     }); 
    }; 

}).call(this); 

источник/шаблоны/somePage.hbs

--- 
{{importJSON "./source/data/favorite.json"}} 
{{log color}} 
<html> 
<body> 
    <h1>Some Page</h1> 
</body> 
</html> 
+0

Спасибо Джеймсу, который решил это аккуратно, с дополнительным бонусом работы в частичных тоже - было несколько коряг, пытающихся получить частичный YAML, чтобы работать таким образом. Бонусный вопрос: знаете ли вы, можно ли вызвать помощника из YAML? Я нигде не видел примеров, поэтому я начинаю считать, что это не так. –

+0

Я не знаю, как вызвать частичный или другой пользовательский код из шаблонов YAML lodash. Кажется, что шаблоны имеют доступ к модели данных сайта, но результаты могут быть ограничены строками. Пример в [Assemble YAML docs] (http://assemble.io/docs/YAML-front-matter.html) довольно прост. – James