0

正在找到并加载我的所有部门,但我的应用程序(即 mapApp.js 文件)从未找到,并且在我尝试使用它时总是给我一个未定义的结果。

我究竟做错了什么 ?

这是我的文件夹层次结构

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

这是我初始化 require.js 的 Main.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. 
        }
    });
});
4

1 回答 1

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 是页面中的全局变量。我认为这是有道理的,因为您总是需要它们。

于 2012-10-03T18:25:47.103 回答