使用 Backbone.js 时,您应该在客户端上有一堆模型,这些模型从服务器获取并通过 REST api (CRUD) 更新到服务器。客户端负责 MVC,服务器只回答一堆简单的查询、删除和更新。
这意味着客户端可能包含以下代码:
- 楷模
- 意见
- 路由器
- 模板 (HTML)
- 收藏品
- 实用程序
- 第 3 方库
服务器将具有:
- Schemas(用于需要存储在 DB 中的模型)
- 楷模
- 实用程序
- 用于 restful api 响应的服务器代码(例如 express.js)
- 库
那么......应该在客户端和服务器之间共享哪些代码?一些实用程序,也许是模型......(虽然我认为不应该共享模型代码)
基本上,尽管我们(开发人员)都对在客户端和服务器之间共享代码感到兴奋,但用例、角色和职责并不真正需要这种耦合。(至少那是发生在我身上的事)
顺便说一句,有一些例外情况,您希望在服务器上实现相同的 MVC 以实现快速渲染和搜索引擎合规性,airBnb 正在使用骨干网和节点执行此操作。一旦他们稳定了 API,他们将在那里开源解决方案
编辑:
根据我的经验,骨干模型是非常薄的仅数据对象(和一些验证代码)。观众观察它们并改变它们,所以大部分代码都在那里。我认为在这种情况下,将代码从服务器解耦到客户端是一个很好的设计决策,它允许您在不更改客户端的情况下使用您的数据库模式。
但当然,这在其他用例中可能会有所不同......
关于您的实际问题:
您可以查看 airBnB 项目 Rendr:(https://github.com/airbnb/rendr)
Rendr 是 Airbnb 的一个小型库,可让您在客户端和服务器上无缝运行 Backbone.js 应用程序。允许您的 Web 服务器向应用程序的任何深层链接提供完整格式的 HTML 页面,同时保留传统 Backbone.js 客户端 MVC 应用程序的快速感觉。