RequireJS如何处理模块?

时间:2014-02-07 07:36:36

标签: java backbone.js coffeescript requirejs playframework-2.2

我对RequireJS的理解是,如果你需要来自模块A的模块B,然后模块B需要模块C,那么模块C将能够访问模块A.这是正确的吗?

如果没有,我如何让模块C使用A?

这是我的问题: 我有一个Backbone模型帐户,一个名为Core的咖啡文件,以及我的HTML中的require脚本标签使用的cmsmain文件。 cmsmain.coffee

requirejs.config
    baseUrl: 'assets/javascripts/cms'
    paths: 
        jquery: '../lib/jquery'
        backbone: '../lib/backbone'
        underscore: '../lib/underscore'
        AccountModel: 'model/account'


require ['core', 'jquery', 'underscore', 'backbone'], (Core, $, _, Backbone) ->
    Core.Start()

core.coffee:

define () ->
    # Declare the app namespace
    Core = window.Core =
        Classes:
            Models: {}
            Collections: {}
            Controllers: {}
            Views: {}
        Rendered:
            Models: {}
            Collections: {}
            Controllers: {}
            Views: {}
        Templates: {}
        Routes: {}
        Start: ->
            alert("Started")

    return Core

model/account.coffee

# Account Model
define () -> 
    class Core.Classes.Models.Account extends Backbone.Model

        initialize: ->

        login: (username, password) ->

在我需要帐户模型之前,一切正常,然后我得到了:

Uncaught ReferenceError: Core is not defined 

即使我在帐户模型中需要Core,我也得到了:

Uncaught TypeError: Cannot read property 'Classes' of undefined

这两个错误都是由帐户模型生成的

1 个答案:

答案 0 :(得分:1)

您需要使用RequireJS依赖项返回的值(CoffeeScript近似...):

define ['core'], (Core) -> 
    class Core.Classes.Models.Account extends Backbone.Model

        initialize: ->

        login: (username, password) ->

否则,在尝试访问Core属性之前,RequireJS不会等待Classes加载。

参见例如https://github.com/davidsulc/structuring-backbone-with-requirejs-and-marionette/blob/master/assets/js/apps/contacts/edit/edit_controller.js