1

我是骨干新手,但看过几个关于它的教程截屏视频,无论是否有requirejs。

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

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

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

经过一番研究,试图找到与我想使用的风格相同的人,我终于找到了:使用 requirejs 和主干的 web 应用程序的文件结构。他们似乎更喜欢 App.[Module Name] 方法:即,

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

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

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

4

2 回答 2

1

我喜欢这个博客中描述的方法: http ://weblog.bocoup.com/organizing-your-backbone-js-application-with-modules/

于 2013-01-28T04:50:14.593 回答
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()数组中并拥有它。

于 2013-01-27T23:58:24.197 回答