要求JS无法找到我的应用程序

时间:2012-10-03 18:15:36

标签: javascript backbone.js requirejs

我的所有deps都被找到并加载了,但是我的应用程序是mapApp.js文件永远找不到,并且当我尝试使用它时总是给我一个Undefined。

我做错了什么?

这是我的文件夹层次结构

Site
  |
  |- JS 
      |- Libs
      |    |- * All my deps *
      |
      |- mapApp.JS
      |
      .
      .
      .
      |- /models
      |- /views
      |- /collections

这是我的Main.js文件初始化require.js

require.config({
  baseUrl: '/ctt-ct/js/'
  ,urlArgs: "ts=" +  (new Date()).getTime()

  ,paths: {
      'jquery': 'libs/jquery.min'
      ,'underscore': 'libs/underscore-min'
      ,'backbone': 'libs/backbone'
      ,'templates': '../templates'
  }

  ,shim: {
    jquery: {
      exports: '$'
    }
    ,underscore: {
      exports: '_'
    }
    ,backbone: {
        deps: ['underscore', 'jquery'],
        exports: 'Backbone'
    }
  }
});

require([
  'jquery'
  ,'underscore'
  ,'backbone'
  ,'mapApp'
],
function ($, _, Backbone, App) {
  $;                       // <- working
  _;                       // <- working
  Backbone.View;           // <- working
  var app = new App();     // <- NOT working !!!
});

mapApp.js

require([
  'jquery'
  ,'underscore'
  ,'backbone'
],
function ($, _, Backbone) {
    var App = Backbone.View.extend({

        el : $('#map_canvas')    
        ,initialize : function(){
                 // DO a lot of stuff and don't return anything.
        }

        ,drawData: function(){
                 // Do other stuff. 
        }
    });
});

1 个答案:

答案 0 :(得分:1)

您必须从函数返回App:

...
function ($, _, Backbone) {
    var App = Backbone.View.extend({

    });

    return App;
});

通常情况下,我不会这样使用它,但我绝对不确定正确的方法(文档不是很友好)。我会经常写:

mapApp.js

define([
  'views/otherView' //Other BackboneView
],
function (OtherView) {
    var App = Backbone.View.extend({

        el : $('#map_canvas')    
        ,initialize : function(){
            // stuff ; not too much in a View
        }

        ,render : function(){
             var otherView =  new OtherView();
             ...
             return this;
        }
    });
    return App;
});

在这种情况下,Backbone,Underscore和jQuery是页面中的全局变量。我觉得你总是需要它们才有意义。