【问题标题】:how to use html templates in CouchDB如何在 CouchDB 中使用 html 模板
【发布时间】:2012-04-06 05:43:44
【问题描述】:

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

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

任何帮助都会动摇!

谢谢!

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

【问题讨论】:

    标签: templates couchdb underscore.js commonjs kanso


    【解决方案1】:

    根据定义,CouchDB 附件是not accessible in show and list functions

    显示和列表函数支持 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
    

    【讨论】:

    • 感谢您的快速回复!太好了,我已经做到了这一点,但是有没有办法包含 html 模板(或 css)?从长远来看,将我的模板创建为 javascript 字符串确实很难维护。
    • 是的,在map函数中,this是对设计文档的引用。如果设计文档中有"hello":"Hello, {{user}}",那么在map函数里面,可以引用this.hello,得到字符串"Hello, {{user}}"
    • 非常感谢杰森!这很棒!嘿,我一直在学习如何使用 CouchDB,有什么方法可以帮忙吗?教别人?向社区添加沙发应用程序?等等……
    • 不客气。我实际上更喜欢@Slartibartfast 的答案,因为它有事情运作的历史:)
    • @Costa 我强烈建议您通过电子邮件向 CouchDB 用户列表发送相关问题。如果你想积累沙发应用程序的经验,我希望社区拥有 百万 个应用程序,其他人也有想法!
    【解决方案2】:

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

    模板和库必须是设计文档的一部分。您可以通过引用this.some_key 来访问原始值(作为字符串);或者通过执行require("some_key") 来通过 CommonJS 加载它们。

    例如:

    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());
            }
        }
    };
    

    (Sharing code between views)

    要在服务器端呈现模板,您需要将它们编码为字符串并像需要其他 JavaScript 库一样需要它们。 (对于浏览器端渲染,可以通过 AJAX 获取附件。)

    【讨论】:

    • 谢谢!将我的模板编码为字符串正是我想要避免的。接下来我将寻找某种预处理器。
    • 查看/显示可以包括任何东西,使用CommonJS。在您的示例中, Kanso(虽然出色)是无关紧要的。 map 函数中的require() 出现在 CouchDB 中。
    • @JasonSmith 这很有趣。这是最近的变化吗?为什么 CoichApp 有包含宏的宏?
    • @Slartibartfast 它到达了 CouchDB 1.1。旧的 CouchApp 功能是一种解决方法。我冒昧地更新了您的答案,以讲述漫长的肮脏传奇:)
    • 谢谢,伙计们,这很清楚了!到目前为止,我能够使用 require 包含下划线,使用 this.templates 或 require 包含 html 模板,并使用 _.template 编译模板以使用列表函数显示我的内容。我的下一个目标是看看我是否可以创建一个完整的动态 html 页面(css、js、imgs、字体和所有),并通过 couchdb 列表函数通过一个 GET 请求使其可用。 3 或 4 个请求我完全没问题,但这将是一个有趣的挑战。
    猜你喜欢
    • 2018-12-24
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多