1

据我在互联网上阅读,如果你想一起使用backbone.js和node.js,通常你使用node.js(express.js特别是)作为后端API提供者(加上其他功能,比如持久性,等),而backbone.js是前端的引擎,这意味着提供html模板、视图、模型等。

我在 Internet 和 github 上阅读的骨干项目通常以 index.html 开头,该 index.html 直接执行一个 javascript 文件,该文件实例化“类”,如路由、集合、视图等。前端的视图负责注入html 和 css 模板并自行管理视图,如事件等。

当我看到一些像backbone.iobind(https://github.com/logicalparadox/backbone.iobind)这样的项目时,问题就出现了,它使用了一种我真的不明白的非常特殊的配置以及它是如何工作的。

如果您查看源代码,node.js 服务器不仅负责 API,还负责插入 Backbone 将使用的 html 模板。我有很多疑问:

  1. 谁执行骨干前端,因为没有执行执行路由器、视图、集合和历史的 javascript 的“索引”?

  2. 你如何同步 express.js 生成的模板,以及要使用它们的主干.js 端的视图?

  3. 什么是主干.js 路由器类的目的,因为您使用 node.js 路由器来感染东西?

  4. 为什么你使用这种架构,而不是像我一开始描述的那样更干净?

非常感谢您的帮助

4

1 回答 1

5

经过几天的研究,看到互联网上没有关于它的信息,我将回答我自己的问题。希望一些编辑会纠正错误的答案。我要描述的是node.js 和backbone.js 应用程序的“主干”,它从后端而不是前端注入模板,因为社区现在正在发展。为什么开发人员选择两个选项之一?根据不同的变量:安全性、加载和渲染速度等。过程总结:

A. 基本上,第一步是在express.js中配置views目录和模板引擎:

    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');

B. 在此之后,我们将在其中定位所有静态资源的中间件。当我们谈论“静态”资源时,我们谈论将在前端执行的图像、javascript、html、css 等:

    app.use(express.static(path.join(__dirname, 'public')));

如果 express(或 connect)在 /public 目录中找到一个 index.html,它将运行它。如果没有,您必须通过快速路由系统创建路由。

C. 我们处于 express.js 从后端注入 HTML 的情况。为此,正如我所写,我们需要一个路由系统,例如:

    app.get('/', require('./views/index').init);

在这里,当express.js检测到用户访问主页面'/'时,它会查找位于/views父目录(不是/public)内的index.js文件,并且会从这里index.jade将被渲染并注入到前端:

    res.render('index');

D. index.jade 将提供所需的资源。在我们的例子中,将提供这个 .jade 所需的 CSS、库(jquery、backbone 等),最后,backbone.js 需要的两个元素:

  1. 将加载backbone.js 前端的javascript 文件。在这里,所有文件都将位于 /public 目录中:

     script(src='/views/index.js')
    
  2. index.jade 还将提供backbone.js 视图所需的模板:

     script(type='text/template', id='login')
    

E. 有几种不同的backbone.js 配置。通常,您从前端路由器启动主应用程序,所有对象都在此处初始化。但是同步 index.jade 文件、模板和 javescript 视图的执行的主要思想是在 DOM 加载后执行最后一个。出于这个原因,最好的办法是使用下面的 jquery 语句:

     $(document).ready(function() {
        app.view = new app.View();
     });

也许有些人会觉得这个总结没有必要,但是对于那些不知道将所有都放在前端或混合 HTML node.js 后端 + 主干.js 前端之间的区别的初学者来说,我认为这会很有用. 首先,结构如何。也许这听起来很疯狂,但互联网上没有解释如何构建它的信息。

最好的祝福

于 2013-04-16T06:05:13.137 回答