2013-04-06 65 views
1

据我所知,如果您想一起使用backbone.js和node.js,通常使用node.js( express.js particulary)作为后端API提供程序(加上其他功能,如持久性等),而backbone.js是前端引擎,它表示提供html模板,视图,模型等Backbone.js视图使用从Node.js(Express.js)注入的模板

我在互联网和github上看到的骨干项目通常以一个index.html开始,它直接执行一个javascript文件,用于实例化路由,集合,视图等“类”。前端视图负责监控HTML和CSS模板并自行管理视图,如事件等。

当我看到一些像backbone.iobind(https://github.com/logicalparadox/backbone.iobind)这样的项目时,会出现这个问题,它使用非常特殊的配置,我真的不明白它的工作原理。

如果您看到源代码,那么node.js服务器不仅负责API,还负责监测将由Backbone使用的html模板。我有很多疑惑:

  1. 谁执行骨干前端,因为是执行执行路由器,视图,收藏和历史的JavaScript没有“指标”?

  2. 你如何同步由express.js注入的模板以及将要使用它们的backbone.js端的视图?

  3. 什么是backbone.js路由器类的目的,因为您正在使用node.js路由器来监测东西?

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

预先感谢您非常的帮助

+0

你想使用与服务器Socket.IO风格的沟通?如果没有,这个Backbone.JS扩展不适合你。此外 - 它只处理一部分功能。您仍然可能需要路由器等。您一定需要模型和集合。甚至在他们的示例中:https://github.com/logicalparadox/backbone.iobind/blob/master/example/public/js/example.js – WiredPrairie 2013-04-06 20:01:01

+0

Hi @WiredPrairie,我知道它需要一个主干路由器,但我不知道不知道为什么,就像我在第三个问题中所描述的那样。我在其他项目中看到过这种模式,例如https://github.com/jedireza/drywall/。在此先感谢 – 2013-04-06 22:00:50

+0

如果您不需要跟踪历史记录和页面导航,则不需要路由器。 – WiredPrairie 2013-04-06 23:57:20

回答

5

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

A.基本上,第一个步骤是在express.js配置视图目录和模板引擎:

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

B.在此之后,我们要找到所有静态资源的中间件。当我们谈论“静态”的资源,我们谈论图像,JavaScript,HTML,CSS等,将在前端执行:

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

如果快递(或连接)发现一个index.html在/ public目录中,它会运行它。如果不是,则必须通过快速路由系统创建路由。

C.我们是在express.js从后端检查HTML的情况下。为此,我写的,我们需要一个路由系统,如:

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

,当express.js检测到主画面“/”用户访问,它会寻找和index.js文件位于内侧/视图父目录(未/公共),并且将在这里,其中index.jade将呈现和inyected到前端:

res.render('index'); 

D的index.jade将提供所需的资源。在我们的例子中,将提供必要为这个.jade的CSS,将由Backbone.js的被requiere库(jQuery的,骨干网等),最后,两个要素:

  1. 的JavaScript文件将加载backbone.js前端。在这里,所有的文件将位于/ 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(); 
    }); 

也许有人会觉得这个总结是不必要的,但不知道有所有的前端之间的差异begginers,或混合HTML node.js后端+ backbone.js前端,我认为会很有用。最重要的是,结构如何。也许这听起来很疯狂,但是互联网上没有关于如何构建它的信息。

问候

0

我没有足够的代表处点上你的答案迈克尔发表评论,所以我必须把它放在这儿,对不起。

无论如何,你会选择生成的文件夹结构如下所示:

appname 
    |--models 
    | |--appmodel.js 
    |--public 
    | | |--webapp // extjs/backbone files 
    | | | |--models 
    | | | |--controllers 
    | | | |--css 
    | | | |--js 
    | | | |--img 
    | | | |--views 
    | | | | |--appview.ejs 
    | | | | |--extbasedview.ejs 
    |--routes 
    | |--router.js 
    |--app.js 

我发现here