骨干应用程序组织

时间:2011-11-25 20:39:04

标签: javascript backbone.js closures underscore.js

我按照本页http://weblog.bocoup.com/organizing-your-backbone-js-application-with-modules

所述组织了我的Backbone应用程序

对于那些没有阅读过文章的人,我会简要解释一下这个想法: 我定义了包含所有模块的单个变量。

var Application = {
  module: function(){
    var modules = {};
    return function(name){
      if (typeof modules[name] == 'undefined')
      {
        modules[name] = {
          Model: {},
          Collection: {},
          Views: {},
        }
      }
      return modules[name];
    };
  }()
};

Application.module是一个按名称返回模块的函数。然后我将我的应用程序模块定义如下:

(function(chat){
  chat.Model = Backbone.Model.extend({ ... }),
  chat.Collection = Backbone.Collection.extend({ ... }),
  etc.
})(Application.module('Chat'));

一切似乎都没问题 - 所有代码都被分成了模块,但是当我试图从模块的一个类中实例化一个变量时。

$(document).ready(function(){
  var foo = new Application.module('Chat').Collection();
}); 

上面的代码给了我Backbone的“Uncaught TypeError:无法读取未定义的属性'bind'错误”我无法理解为什么?

2 个答案:

答案 0 :(得分:0)

我上周也看到了这个错误...你是否正确地包含了underscore.js? 在我的情况下,我在页面中包含了underscore.js,但是在backbone.js引用之后。

下划线.js真的必须在骨干可以做之前加载:)

这样做:

<script src="underscore.min.js"></script>
<script src="backbone.min.js"></script>

答案 1 :(得分:0)

我强烈建议使用[require] [1]。 它非常容易实现,您可以为所有.js库指定依赖关系。

如果你探究它,你将无法生存。

在这里你可以看到一个如何工作的例子: https://github.com/charnekin/api/blob/master/js/main.js