我正在编写一个简单的CMS CouchApp作为宠物项目。我在OS X 10.7.4上运行CouchDB 1.2.0并使用Python CouchApp开发工具。
基本上我想把页面作为文档,页面会引用另一个包含网站共享布局的文档。
页面文档示例:
{
"_id": "index",
"_rev": "3-d5451ea54212ae6ec0d8d2d95c5f225d",
"content": "<img src=\"/images/img.jpg\"/> <p>Lorem ipsum dolor sit amet.</p>",
"layout": "layouts/default"
}
布局文档示例:
{
"_id": "layouts/default",
"_rev": "1-d2fa96e15ab8768828b262d81265f3d2",
"content": "<!DOCTYPE html> <html><head> <title>Foo</title> </head><body><div>{{content}}</div></body> </html>"
}
所以基本上渲染一个页面我需要获取两个文档。然后我会使用Mustache将页面渲染到布局中。
我摆弄了show函数一段时间,但无法找到一种方法来获取函数中的布局文档。然后我偶然发现了include_docs
,我现在正试图使用列表函数和视图来实现这一点。我的地图功能如下:
function(doc) {
if (doc.layout) {
emit([doc._id, 1], doc);
emit([doc._id, 0], {_id: doc.layout });
}
};
当我在提供参数include_docs=true&startkey=["index",0]&endkey=["index",1]
的浏览器中导航到视图本身时,它可以正常工作并加载布局文档。
但是,布局文档不会传递给列表函数。在上述视图上运行此列表函数
function(head, req) {
var doc = null;
var row = getRow();
do
{
if (!row.value.layout){
doc = row.value;
}
} while (row = getRow())
for (i in doc) {
send(i);
}
}
...使用相同的参数渲染:
_id
我做了一些谷歌搜索,发现有a bug in CouchDB链接文件没有传递到列表功能。据我所知,这应该已经修好了。这是一个回归的情况还是我被推迟了?
答案 0 :(得分:4)
行的值存储在row.value中,但该行的doc位于row.doc中。 :)