使用node.js和backbone.js进行模板渲染

2024-04-15

有没有人找到一个好的解决方案来开发可在服务器和客户端上使用的backbone.js模板?

这对于backbone.js历史堆栈来说是非常理想的,因为用户可以在浏览器位置栏中共享和链接到真实的url,并且node.js服务器可以在第一个页面视图上呈现页面,同时在客户端中使用相同的模板在后续页面视图中重建页面。

这也将为用户和搜索引擎提供理想的输出,这些搜索引擎会抓取链接,并且无需解析或执行 JavaScript 即可查看完全呈现的工作页面。

更新了更多信息:

两种可能的方法似乎是:

1)骨头——https://github.com/developmentseed/bones https://github.com/developmentseed/bones

Bones 有一些需要安装的怪癖,目前需要旧版本的 Node 和 npm。

2) 胶囊-https://github.com/andyet/capsule https://github.com/andyet/capsule

我还没试过,但看起来很相似。如果有人对这些项目感兴趣,我会很感兴趣。


我目前正在研究一个名为“onecode”的框架 https://github.com/ashtuchkin/onecode这就是你所要求的。目前它缺乏文档,但我有一个基于它的工作项目,所以它也适合你。我也在寻找贡献者。

这是它的工作原理。几乎所有代码都在客户端和服务器之间共享,包括模型和视图。

  1. 在服务器上,您创建一个 REST API,在其中定义业务规则、安全性、数据库操作,以及所有您不能信任客户端的内容。
  2. 当第一次请求页面时,客户端(使用标准 Backbone Ajax 调用)和服务器本身(直接使用覆盖的$.ajax方法)。
  3. 当客户端请求页面时,服务器会创建所有需要的模型和视图,向 API 发出直接请求并呈现 HTML。此外,它还记住来自 API 调用的所有数据以及哪些 HTML 元素对应于哪些视图。
  4. 模型/视图代码、HTML 和数据提供给客户端。在这里,HTML 已完全呈现并发挥作用,因此即使用户关闭了 JavaScript,他也可以单击链接并浏览网站(当然他不会获得任何动态功能)。但是,如果启用了 Javascript,所有模型和视图都会在后台自动重新创建并重新绑定到 DOM 节点,而不需要用户等待。
  5. 之后,应用程序就像单页应用程序一样工作,仅从同一 API 请求数据 (json),在客户端上呈现模板。

这意味着:

  1. 您只需编写一次演示和动态代码。
  2. 第一个请求的页面以闪电般的速度提供并显示给用户,不需要等待所有脚本加载和运行,只需 HTML/CSS。
  3. 下一页也非常快,因为仅请求原始数据,模板在客户端上呈现。您还可以使其具有视觉吸引力,而不是通常的页面重新加载。您甚至可以在用户浏览网站时播放音乐。
  4. 搜索引擎和社交网络爱你。

该架构强制提出一些合理的要求,这将使您成为更好的开发人员。就像是:

  1. 服务器操作和业务规则需要单独的、定义良好的 API。
  2. 没有全局变量。
  3. 视图的处理比一般 Backbone 更严格,更像是可堆叠的 UI 组件。
  4. HTML 渲染和动态行为之间清晰分离。

可以找到一个非常简单的例子在源代码树中 https://github.com/ashtuchkin/onecode/tree/master/examples/simple。我使用 Backbone 作为模型和视图的基础,并且浏览器化 https://github.com/substack/node-browserify将js包交付给客户端。

在我的项目中,我使用内联模板和 EJS 作为模板引擎。这样做的优点是可以将 HTML 和代码(我使用 CoffeeScript)保留在同一位置。但该框架能够与 Jade 等其他模板引擎一起从外部文件打包模板。请看一个模板示例 https://github.com/ashtuchkin/onecode/tree/master/examples/templating关于如何做到这一点。

如果您对这种方法感兴趣,请告诉我,也许它会促使我开始为其编写文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用node.js和backbone.js进行模板渲染 的相关文章

随机推荐

  • 在Python中按多个值对列表列表进行排序

    我需要对列表列表进行排序 其中每个列表entry外部列表是一个由三个整数组成的列表 如下所示 3 1 0 1 2 3 3 2 0 3 1 1 诀窍是我需要对其进行排序entry 0 如果有平局 则按以下顺序对它们进行排序entry 1 如果
  • OSX - 始终隐藏某些文件

    我知道如何在终端中显示和隐藏隐藏文件 但是有没有办法在显示隐藏文件时隐藏某些文件 例如 DS STORE 可以这么说 使某些文件超级隐藏吗 Use chflags与隐藏选项 ie chflags hidden fileToHide从 Fin
  • XMI 2.1.1 的 XSD

    我必须使用 JAXB 解析 XMI 文件 xmi 版本 2 1 1 为此 我必须生成与 XMI 文件相对应的 Java 类 因此 我需要 xmi 文件的 shema 定义才能使用 jxc 工具执行此操作 我希望有人知道在哪里可以找到这个文件
  • `AVCaptureVideoDataOutput` 消耗的内存是 `AVCaptureMovieFileOutput` 的三倍

    Issue 我正在使用 AVFoundation 来实现一个相机 它能够在运行特殊的人工智能处理时录制视频 拥有一个AVCaptureMovieFileOutput 用于视频录制 and a AVCaptureVideoDataOutput
  • 当由不同模块导入时,如何访问 Python 2.7 中的相对路径

    目标 使用从各种 python 模块调用的通用实用程序函数时访问 写入相同的临时文件 背景 我正在使用 python Unittest 模块来运行一组自定义测试 这些测试通过 pySerial 与仪器接口 因为我使用的是unittest模块
  • AudioConverterNew 返回 -50

    我有一个关于使用 AudioQueue 服务的小问题 我已按照 Apple 网站上提供的指南进行操作 但是当我启动并运行音频队列时 我收到消息告诉我 AudioConverterNew 返回 50 现在 我知道 50 错误代码意味着存在错误
  • node.js可以导入java库吗

    我有一个 Nodejs 应用程序 它有一些昂贵的计算 我正在考虑用 java 来完成这部分 这样我就可以更轻松地利用线程和数学库 有没有一种简单的方法可以让nodejs与外部java库对话 java 库将包含一个频繁调用 javascrip
  • Hive 分区表上的 Spark 行为

    我用的是 Spark 2 实际上我不是执行查询的人 所以我不能包含查询计划 数据科学团队问过我这个问题 我们将 Hive 表划分为 2000 个分区并以 parquet 格式存储 当在 Spark 中使用相应的表时 执行器之间恰好执行了 2
  • 如何查找没有自己登录名的 sqlserver 域用户的登录名、数据库用户名或角色?

    我创建了一个名为 MYDOMAIN Domain Users 的登录名和数据库用户 我需要找到登录的域用户具有哪些角色 但所有获取当前用户的调用都返回域用户名 例如 MYDOMAIN username 不是数据库用户名 例如 MYDOMAI
  • Thymeleaf 中链接绝对 URL 时 th:href 和 href 之间的区别

    就在 Thymeleaf 的开头文档 http www thymeleaf org doc articles standardurlsyntax html关于标准url语法有两个例子 但没有说明它们之间的区别 a a href http w
  • 比特率 JWplayer

    我无法让 jwplayer 以不同的比特率工作 对于每个视频 我都会创建具有不同后缀且比特率较低的新输出文件 例如 输出1 高比特率 test original mp4 输出 2 中等比特率 test medium mp4 输出 2 低比特
  • 如何列出 Git 存储库中的目录以及每个目录条目的最新提交信息?

    我想列出 Git 存储库中的目录以及每个目录条目的最新提交信息 类似于 GitHub 如何显示目录或 viewvc 如何显示 SVN CVS 存储库中的目录 目前我这样做 获取目录条目git ls tree master并从输出中解析目录结
  • 如何在 JavaScript 的“if”语句中指定多个条件[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 这是我试图提及两个条件的方式如果这个或这个 但它不起作用 if Type 2 PageCount 0 Type 2 PageCou
  • 单击 RecyclerView 转到另一个包含 android 中数据的活动

    我正在使用 RecyclerVeiw 显示一些图像 单击它应该启动新活动 显示 RecyclerView 的 id 名称 我实现了代码 但它现在可以工作 但不可点击 下面是我的适配器 import android content Conte
  • 将 PEM 公钥读取到 iOS 中

    我有一个由 java 使用以下代码生成的 base64 公钥 RSAPublicKeySpec rsaKS new RSAPublicKeySpec modulus pubExponent RSAPublicKey rsaPubKey RS
  • java中通过POST方法发送Xml字符串

    我想通过 POST 方法将 xml 字符串传递到 URL 我尝试了下面的代码片段 但它没有返回任何内容 disableCertificateValidation String url https url https Properties s
  • 什么是“void(*old_sigint_handler)(int)”?

    这是一个语法问题 我遇到了这条线 void old sigint handler int 我不知道它在做什么 看起来像是没有变量名的三种类型的串联 我希望得到澄清 void old sigint handler int 这定义了old si
  • 线程模拟的多级使用

    我对一些很久以前编写的进行线程级模拟和进程生成的类遇到了一些问题 问题似乎是我对这些实用程序类的使用超出了其他人尝试使用它们所做的事情 第一个通过使用 OpenThreadToken 和 DuplicateToken 以及 Imperson
  • 从远程应用程序服务器连接到 Websphere Liberty jmsServer

    是否可以从远程应用程序服务器连接到部署在 Websphere Liberty 中的队列 我使用该产品的免费版本 Liberty 8 5 5 7 我在 server xml 中配置了连接工厂
  • 使用node.js和backbone.js进行模板渲染

    有没有人找到一个好的解决方案来开发可在服务器和客户端上使用的backbone js模板 这对于backbone js历史堆栈来说是非常理想的 因为用户可以在浏览器位置栏中共享和链接到真实的url 并且node js服务器可以在第一个页面视图