2012-07-25 2 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에 저장되지만 행의 문서는 row.doc에 있습니다. :)