4

我一直在到处寻找,试图弄清楚这一点。我正在尝试从 couchdb 显示和列表函数生成 html 页面。我想利用 underscore.js 的模板解决方案。我陷入困境的部分是如何在我的显示和列表函数中包含 html 模板。

我在哪里存放它们?作为附件?然后我如何在我的 show 和 list 函数中引用它们。我假设 !json 和 !code 宏没有被使用,我不知道如何使用普通 js 中的 require() 来做到这一点。

任何帮助都会摇滚!

谢谢!

额外信息:我使用 Kanso 来推送我的应用程序,而不是 CouchApp。

4

2 回答 2

5

根据定义,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
于 2012-04-06T11:01:33.333 回答
4

我对 Kanso 不熟悉,但在 CouchDB 1.1 之前,CouchDB 中的查看/显示等功能不能包含任何内容。(CouchApp 工具有自己的!include解决方法来解决这个问题。)这些不再是必需的。CouchDB 1.1 添加了 CommonJS 支持。

Tll 模板和库必须是设计文档的一部分。您可以通过引用访问原始值(作为字符串)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 获取附件。)

于 2012-04-06T07:47:52.620 回答