骨干结构

时间:2013-01-27 23:15:42

标签: backbone.js

我是骨干新手,但已观看了几个教程截屏视频,无论是否有必要。

我的问题涉及设置结构(如果使用require和/或变量/对象结构,则都是文件结构)。

我观看的大多数教程似乎更喜欢App.Models,App.Collections和App.Views方法,并且每个项目都有模块的名称:ie,

App.Models.todo = Backbone.Model.extend({...});
App.Collections.todos = Backbone.Collection.extend({...});
App.Views.todo = Backbone.View.extend({...});

经过一番研究,试图找到一个使用我想要的风格的人,我终于找到了:File structure for a web app using requirejs and backbone。他们似乎更喜欢App。[Module Name]方法:即

App.Todo.Model = Backbone.Model.extend({...});
App.Todo.Collection = Backbone.Collection.extend({...});
App.Todo.Views = Backbone.View.extend({...});

我个人更喜欢App。[Module Name]结构,而不是让我的模块分开,但是想知道具有不同结构的好处(如果有的话)。

您使用哪种结构,以及它对您过去可能看到或使用的不同结构有何帮助?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

如果您使用的是requireJS,则不需要/想要将模型/视图附加到附加到窗口的全局命名空间对象(无App.Views,App.Models)。使用requireJS或不同的AMD模块加载器的一个好处是你可以避免使用全局变量。

您可以定义这样的模型:

define(['underscore', 'backbone'], 
    function(_, Backbone) {
    var MyModel = Backbone.Model.extend({});

    return MyModel;
});

然后定义一个视图:

define(['underscore', 'backbone', 'tpl!templates/someTemplate.html'],
  function(_, Backbone, template) {
  var MyView = Backbone.View.extend({});

  return MyView;
});

现在你有一个没有全局变量的模型和视图。然后,如果某个其他模块需要创建其中一个(可能是您的App模块),则将其添加到define()数组中,然后就可以了。