2012-07-25 43 views
2

我正在編寫一個簡單的CMS CouchApp作爲寵物項目。我在OS X 10.7.4上運行CouchDB 1.2.0,並使用Python CouchApp開發工具。CouchApp:具有include_docs = true的列表函數

基本上我想要頁面作爲文檔,頁面會引用另一個包含網站共享佈局的文檔。頁面文件的

實例:佈局文件

{ 
    "_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>" 
} 

所以基本上呈現一個頁面,我需要獲取兩個文件。然後,我會使用小鬍子將頁面呈現到佈局中。

我擺弄了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其中鏈接文檔沒有得到傳遞給列表函數。據我所知,這應該已經解決了。這是迴歸還是我被推遲了?

回答

3

該行的值存儲在row.value中,但該行的doc位於row.doc中。 :)

相關問題