我对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
这两个错误都是由帐户模型生成的
答案 0 :(得分:1)
您需要使用RequireJS依赖项返回的值(CoffeeScript近似...):
define ['core'], (Core) ->
class Core.Classes.Models.Account extends Backbone.Model
initialize: ->
login: (username, password) ->
否则,在尝试访问Core
属性之前,RequireJS不会等待Classes
加载。