backbone.js Uncaught TypeError: невозможно прочитать свойство «Просмотр» из null

Когда я запускаю свое основное приложение в NetBeans 7.3.1, главная страница отображается в течение нескольких секунд, может быть, 5 или 6, затем в выводе NetBeans я вижу следующее...

Uncaught TypeError: Cannot read property 'View' of null (18:43:36:307 | error, javascript)
    at  (js/views/HomeView.js:6:28)
    at d.execCb (js/libs/require/require.js:27:197)
    at o (js/libs/require/require.js:10:471)
    at  (js/libs/require/require.js:12:184)
    at o (js/libs/require/require.js:12:75)
    at  (js/libs/require/require.js:14:1)
    at o (js/libs/require/require.js:12:75)
    at l (js/libs/require/require.js:12:336)
    at g.finishLoad (js/text.js:10:192)
    at g.load (js/text.js:10:354)
    at window.undefined.window.navigator.window.document.c.onreadystatechange (js/text.js:7:30)
Uncaught TypeError: Cannot read property 'Model' of null (18:43:36:317 | error, javascript)
    at  (js/models/Member.js:6:26)
    at d.execCb (js/libs/require/require.js:27:197)
    at o (js/libs/require/require.js:10:471)
    at x (js/libs/require/require.js:15:186)
    at m (js/libs/require/require.js:15:207)
    at g.completeLoad (js/libs/require/require.js:21:388)
    at d.onScriptLoad (js/libs/require/require.js:27:490)
Uncaught Error: Load timeout for modules: text!templates/homeTemplate.html 
http://requirejs.org/docs/errors.html#timeout (18:43:38:511 | error, javascript)
    at N (js/libs/require/require.js:7:217)
    at A (js/libs/require/require.js:16:230)
    at  (js/libs/require/require.js:16:394)

Похоже, RequireJS не может загрузить Backbone. Вот main.js...

// Filename: main.js

require.config({
    shim: {
        underscore: {
            exports: '_'
        },
        backbone: {
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        }
    },
    paths: {
        jquery: 'libs/jquery/jquery-min',
        underscore: 'libs/underscore/underscore-min',
        backbone: 'libs/backbone/backbone-min',
        templates: '../templates'
    }
});

require([
    'app',

], function(App) {
    App.initialize();
});

Я полностью запутался в этом. Почему Require не загружает Backbone?

@Sushanth--: отредактировал исходный пост, включив HomeView.js

Вот HomeView.js...

define([
    'jquery',
    'underscore',
    'backbone',
    'text!templates/homeTemplate.html'
], function($, _, Backbone, homeTemplate) {

    var HomeView = Backbone.View.extend({

        el: $("#page"),

        initialize: function() {
        },

        render: function() {
            var compiledTemplate = _.template( homeTemplate, {} );
            this.$el.html( compiledTemplate ); 
        }

    });

    return HomeView;

});

@Sushanth--: я делаю рендеринг из router.js...

// Filename: /js/router.js

define([
    'jquery',
    'underscore',
    'backbone',
    'views/HomeView',
    'views/MembersView'
], function($, _, Backbone, HomeView, MembersView) {

  var AppRouter = Backbone.Router.extend({
    routes: {
      // Define some URL routes
      'members': 'showMembers',
      // Default
      '*actions': 'defaultAction'
    }
  });

  var initialize = function(){
      //alert('router init');
    var app_router = new AppRouter;

    app_router.on('route:showMembers', function () {
        // Like above, call render but know that this view has nested sub views which 
        // handle loading and displaying data from the GitHub API  
        var membersView = new MembersView();
    });

    app_router.on('route:defaultAction', function (actions) {
        // We have no matching route, lets display the home page 
        var homeView = new HomeView();
        homeView.render();
    });

    // Unlike the above, we don't call render on this view as it will handle
    // the render call internally after it loads data. Further more we load it
    // outside of an on-route function to have it loaded no matter which page is
    // loaded initially.
    //var footerView = new FooterView();

    //alert('hello from router.js');
    //Backbone.history.start({pushState: true, root: "/modular-backbone/"});
    //Backbone.history.start({pushState: true});
    Backbone.history.start();
    };

    return { 
        initialize: initialize
    };
});

Добавлено тестовое оповещение в main.js, app.initialize...

require(['app'], function(App) {
    // THIS ALERT NEVER DISPLAYS!?!?!
    alert('inside main.js before app.initialize');
    App.initialize();
});

person Locohost    schedule 26.07.2013    source источник
comment
Вам не хватает свойства baseUrl?   -  person Sushanth --    schedule 27.07.2013
comment
Куда пойдет этот метод?   -  person Locohost    schedule 27.07.2013
comment
@Locohost.. Это не метод. Это свойство конфигурационного файла, которое указывает, каким должен быть baseUrl файлов. Проверьте это requirejs.org/docs/api.html#config-baseUrl   -  person Sushanth --    schedule 27.07.2013
comment
Я добавил baseUrl в require.config в main.js. Я установил несколько разных значений пути и все еще получаю ту же ошибку. Не хватает чего-то еще.   -  person Locohost    schedule 27.07.2013
comment
Как выглядит ваше представление, которое выдает ошибку   -  person Sushanth --    schedule 27.07.2013
comment
@Sushanth-- Добавил мой HomeView.js в OP.   -  person Locohost    schedule 27.07.2013
comment
круто .. Можете ли вы также вставить код внутри метода initialize, где я полагаю, что вы визуализируете представление   -  person Sushanth --    schedule 27.07.2013
comment
@Sushanth-- я добавил router.js, чтобы показать вызов рендеринга представления. Также я добавил раздел из моего main.js. Вы можете увидеть примечание об ошибке в коде выше. Это проблема. Приложение никогда не инициализируется по какой-то причине. Что могло бы вызвать это?   -  person Locohost    schedule 27.07.2013
comment
Я использовал это руководство, чтобы узнать, как организовать магистральный проект: github .com/thomasdavis/backbonetutorials/tree/gh-pages/examples/   -  person Locohost    schedule 27.07.2013
comment
Вы объявили этот файл в HTML <script data-main="js/main" src="js/libs/require/require.js"></script>. Также вы используете ту же структуру папок, что и проект   -  person Sushanth --    schedule 27.07.2013
comment
Когда вы говорите require(['app'], ...) в main.js, просто проверьте, объявлен ли app в require.config, если я не ошибаюсь, он должен указывать на router.js.   -  person Cyclone    schedule 27.07.2013
comment
@Cyclone: ​​строка require(['app']... должна загружать файл app.js, который находится в той же папке, что и main.js, а затем вызывать его метод App.initialize. Но по какой-то причине этот блок приложения не выполняется. Тестовое оповещение выше показывает мне это. Это запуск всего приложения. Это как повернуть ключ в машине и ничего не происходит.   -  person Locohost    schedule 27.07.2013
comment
Одно предложение, не могли бы вы изменить require(['app'], ...) на require(['app.js'], ...) и попробовать?   -  person Cyclone    schedule 27.07.2013


Ответы (1)


Я заменил файлы Backbone и Underscore js версиями AMD, и все заработало.

person Locohost    schedule 27.07.2013