4

私はこれを理解しようとしてどこでも検索してきました。couchdbのshow関数とlist関数からhtmlページを生成しようとしています。underscore.jsのテンプレートソリューションを活用したいと思います。私が立ち往生している部分は、ショーとリストの機能にhtmlテンプレートを含める方法です。

どこに保管しますか?添付ファイルとして?次に、show関数とlist関数でそれらを参照するにはどうすればよいですか。!jsonマクロと!codeマクロは使用されていないと思いますが、一般的なjsからrequire()を使用してそれを行う方法を理解できません。

どんな助けでも揺れるでしょう!

ありがとう!

追加情報:CouchAppではなく、Kansoを使用してアプリをプッシュしています。

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回避策がありました。)これらはもう必要ありません。CouchDB1.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を介した添付ファイルのフェッチは機能します。)

于 2012-04-06T07:47:52.620 に答える