Организация магистральных приложений - PullRequest
1 голос
/ 26 ноября 2011

Я организовал свое приложение Backbone, как описано на этой странице http://weblog.bocoup.com/organizing-your-backbone-js-application-with-modules

Для тех, кто не читал статью, я кратко объясню идею: я определяю одну переменную, которая будет содержать все мои модули.

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();
}); 

Приведенный выше код дает мне сообщение об ошибке «Uncaught TypeError»: не удается прочитать свойство «bind» из неопределенного », и я не могу понять, почему?

Ответы [ 2 ]

0 голосов
/ 02 января 2014

Я настоятельно рекомендую использовать [require] [1]. Это очень легко реализовать, и вы можете указать зависимости для всех ваших библиотек .js.

Если вы попробуете это однажды, вы не сможете жить без него.

Здесь вы можете увидеть пример, как это работает: https://github.com/charnekin/api/blob/master/js/main.js

0 голосов
/ 26 ноября 2011

я тоже видел эту ошибку на прошлой неделе ... правильно ли вы указали underscore.js? в моем случае я добавил underscore.js на страницу, но после ссылки на backbone.js.

underscore.js действительно должен быть загружен, прежде чем магистраль сможет это сделать:)

сделай так:

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