2014-02-13 2 views
0

Я полностью смущен о добавлении данных монго к данным шаблона. Я даже не начал пытаться получить данные из базы данных, так как я не могу заставить свои шаблоны видеть тестовые данные (см. Ниже). Это сейчас на docpad.coffee, но в конечном итоге g будет выходом mongoDB.Docpad: путают о расширении данных шаблона

events: 

    extendTemplateData: (opts) -> 
     # {templateData} = opts 

     getGigsData: -> 
      g = { "date" : "3-4-2013", "location" : "Gent" } 
      return g 

     opts.templateData["getGigsData"] = getGigsData 

И я надеюсь, что к нему доступ с <%= @getGigsData().date %> спасибо за некоторые рекомендации

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

ответ

1

Пробовал это локально. И ударил вопрос:

debug: Emitting the event: extendTemplateData 
    → [2014-02-14 01:38:50.030] [/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/out/lib/docpad.js:1184] [DocPad.emitSerial] 
error: Something went wrong with the action 
    → [2014-02-14 01:38:50.037] [/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/out/lib/interfaces/console.js:107] [ConsoleInterface.destroyWithError] 
error: An error occured: 
ReferenceError: getGigsData is not defined 
    at Object.docpadConfig.events.extendTemplateData (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/docpad.coffee:42:44) 
    at ambi (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/ambi/out/lib/ambi.js:25:27) 
    at DocPad.<anonymous> (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/out/lib/docpad.js:995:25) 
    at ambi (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/ambi/out/lib/ambi.js:23:18) 
    at Task.<anonymous> (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/event-emitter-grouped/out/lib/event-emitter-grouped.js:45:23) 
    at ambi (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/ambi/out/lib/ambi.js:23:18) 
    at fire (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:163:25) 
    at b (domain.js:183:18) 
    at Domain.run (domain.js:123:23) 
    at Task.fire (/Users/balupton/Projects/docpad-extras/skeletons/so-21747504/node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:173:25) 
    at processImmediate [as _immediateCallback] (timers.js:330:15) 

, который указывает, что ошибка на самом деле внутри нашего обработчика событий, а не в коде. Это по какой-то причине getGigsData не создаются, несмотря на наши:

getGigsData: -> 
     g = { "date" : "3-4-2013", "location" : "Gent" } 
     return g 

Рассматривая код, как пользователь CoffeeScript, я нашел проблему. В качестве не CoffeeScript пользователя, вы можете использовать CoffeeScript компилятор на сайте CoffeeScript http://coffeescript.org увидеть скомпилированный JavaScript, который:

({ 
    events: { 
    extendTemplateData: function(opts) { 
     ({ 
     getGigsData: function() { 
      var g; 
      g = { 
      "date": "3-4-2013", 
      "location": "Gent" 
      }; 
      return g; 
     } 
     }); 
     return opts.templateData["getGigsData"] = getGigsData; 
    } 
    } 
}); 

Как мы можем видеть, что, безусловно, не то, что мы ожидали. Мы просто определяем getGigsData внутри объекта, а затем ничего не делаем с ним.

Проблема в том, что мы использовали двоеточие вместо знака равенства, поэтому getGigsData: -> вместо getGigsData = ->. Это не дело coffeescript, но вы столкнулись бы с той же проблемой, если бы это был javascript, хотя javascript может быть немного более очевидным из-за необходимых squiggly фигурных скобок вокруг определений объектов.

Как обойти, если вы предпочитаете использовать JavaScript с DocPad по любой причине, это полностью поддерживается. Для файла конфигурации docpad можно использовать файл docpad.json или docpad.js. Еще один вариант - продолжить использование CoffeeScript, а затем просто поместить код JavaScript в обратную сторону, см.: http://coffeescript.org/#embedded

+0

Эта фиксированная ступень 1, но я все еще застрял на части мангуста [https://github.com/simonh1000/docpad- плагин-монго/блоб/ведущий/SRC/mongo.plugin.coffee] (код). Это находит, что команда console.dir выглядит хорошо, но я не уверен, как подключиться к docpad - в настоящее время вы видите вложенный набор команд 'return', но это не работает. Моя первая попытка передать 'opts' в getGigsData, похоже, не улучшила ситуацию. Я попытался следовать примеру кода, но безрезультатно –

+0

Можете ли вы спросить об этом в качестве отдельного вопроса, и я с радостью последую за ним. – balupton

+0

http://stackoverflow.com/questions/21772015/docpad-adding-to-templatedate-via-callback –

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

  • Нет связанных вопросов^_^