我设置了一个node.couchapp.js CouchApp并将其推送到我的CouchDB。默认包含Sammy和jQuery。现在,我想为模板添加Mustache,但是不知道在哪里?我可以将它用作Node.js模块或jQuery插件。
我从一些示例代码开始,只是为了查看它是否有效,但它没有:
ddoc.lists = {
"basic": "function (head, req) { var that = this; provides('html', function () { var to_html = require('modules/mustache').to_html; var members = []; var row; while (row = getRow()) { members.push({club: row.key[0], name: row.key[1]}); } return to_html(that.templates['roster.mustache'], { members: members }); }) }"
};
结果:
{"error":"invalid_require_path","reason":"Object has no property \"modules\". ...
项目结构是:
. Project
| - app.js
| - attachments
| - - scripts
| ` - index.html
| - modules
| | mustache
| - ` - mustache.js
` - templates
更新 我稍微修改了代码并排除了模板文件夹的可能原因。这个片段来自SO上的解决问题,所以它应该真的有用。但它仍然是同样的错误。我使用npm install mustache安装了mustache.js,并将该文件夹从node_modules重命名为模块(也不能与node_modules一起使用)。
"basic": "function (head, req) { provides('html', function () { var template = '{{%IMPLICIT-ITERATOR}}{{name}}: <ul> {{#items}}<li>{{.}}</li>{{/items}} </ul>'; var mustache = require('./modules/mustache/mustache.js'); return mustache.to_html(template,view);});}"
但它仍然是同样的错误。
答案 0 :(得分:3)
我不确定您遇到的具体错误,但问题是: “现在,我想为模板添加Mustache,但不知道在哪里?我可以将它用作Node.js模块或jQuery插件。”
您可以在两者中使用它。
当Node.js在服务器端运行时,这有效地为您提供了一种方法来定义模板一次(在本例中使用Mustache)并在服务器端(使用Node.js)和客户端(使用jquery-plugin)。
仅供参考(您可能已经知道了): 想象一下渲染产品的搜索结果:
现在,假设您要启用搜索结果的过滤/排序。一般来说,你有3个选择:
从可用性的角度来看,选项3可以说是最好的解决方案。 (快速,低带宽,无页面闪烁或页面跳跃等)。但是如果你需要的话,可以考虑SEO的后备/非js方式。
在实现选项3时,您现在需要一种服务器端模板语言来在初始页面加载时呈现产品,并使用客户端模板语言来呈现从后续ajax调用返回的产品。两者都会产生完全相同的html。不是很干。
这里node.js发挥作用,这消除了编写单独的服务器端模板的需要。相反,只需让node.js使用您在客户端使用的完全相同的胡子模板吐出初始页面。
当然,您可以选择唯一的客户端路由:在初始页面加载时吐出json,并在客户端上进行渲染。这当然是从seo-standpoint可怕的。然而,有些应用程序没有搜索引擎索引,在这种情况下,“客户端上的所有内容”方法都是一个不错的选择。
一些相关问题: