Как использовать HTML-шаблоны в CouchDB

Я искал везде, пытаясь понять это. Я пытаюсь сгенерировать HTML-страницы из функций couchdb show и list. Я хотел бы использовать шаблонное решение underscore.js. Часть, на которой я застреваю, - это как включить HTML-шаблоны в мои функции показа и списка.

Где я могу их хранить? Как вложения? А затем, как я могу ссылаться на них в моих функциях show и list. Я предполагаю, что макросы! Json и! Code не используются, и я не могу понять, как использовать require() из обычного js для этого.

Любая помощь потрясет!

Спасибо!

Дополнительная информация: я использую Kanso для продвижения своих приложений, а не CouchApp.

2 ответа

Решение

Я не знаком с Kanso, но до CouchDB 1.1 функции просмотра / показа и т. Д. В CouchDB не могли ничего включать. (Инструмент CouchApp имел свой собственный !include обходные пути для решения этой проблемы.) Это больше не нужно. CouchDB 1.1 добавил поддержку CommonJS.

Шаблоны и библиотеки должны быть частью проектной документации. Вы можете получить доступ к необработанным значениям (в виде строки), ссылаясь на this.some_key; или загрузить их через CommonJS, выполнив require("some_key"),

Например:

exports.example_view = {
    map: function (doc) {
        // this must be placed *inside* the map function
        var example = require('views/lib/example');
        if (doc.num) {
            emit(doc._id, example.fn());
        }
    }
};

( Совместное использование кода между представлениями)

Для рендеринга шаблонов на стороне сервера вам необходимо закодировать их в виде строки и потребовать их так же, как вам нужны другие библиотеки JavaScript. (Для рендеринга на стороне браузера работает вложение через AJAX.)

Вложения CouchDB по определению недоступны в функциях show и list.

Показать и перечислить функции поддерживают CommonJS. Так что вам просто нужно включить любые библиотеки в дизайн документа.

{ "_id": "_design/example"
, "say_hi": "module.exports = function(person) { return 'Hello, ' + person }"
, "shows":
  { "hello": "function(doc, req) { var hi = require('say_hi'); return hi(req.query.me) }"
  }
}

Эта точка зрения будет выглядеть так

GET /my_db/_design/example/_show/hello?me=Jason

HTTP/1.1 200 OK
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Date: Fri, 06 Apr 2012 11:02:33 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 12


Hello, Jason
Другие вопросы по тегам