在backbone-on-rails gem 中,所有内容都加载到一个“父类(super class)”中
window.MyApp =
Models: {}
Collections: {}
Views: {}
Routers: {}
initialize: ->
# start code here
然后所有类都由
创建users = new MyApp.Collections.Users()
但重要的是,我可以将变量设置为该顶级类的属性,然后从任何地方访问它。
MyApp.router = new MyApp.Routers.AppRouter()
# so later in a view I can call
MyApp.router.navigate(...)
所以现在我正在制作一个简单的 JS 应用程序,我不需要 Rails,并且我一直在使用 RequireJS 来处理 RoR Assets 管道所做的一切。一开始这有点困难,但我已经解决了。
我遇到的真正问题是我真的想要那个“顶级”类,这样我就可以使模型在我的应用程序中可访问(主要是每个 View )。但我无法做到这一点。
require.config
paths:
jquery: '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min'
underscore: 'vendor/underscore.min'
backbone: 'vendor/backbone.min'
templates: '../templates'
require ['app'], (App) ->
# I tried something like this, but window.MapApp still is inaccessible
window.MapApp = App
MapApp.initialize()
我真的希望能够设置 App.user = new User(...) 以及 App.router = new Router(...)
感谢您一直陪伴我度过这一切。有什么想法吗?
最佳答案
您可以在单独的模块中创建命名空间,然后根据需要包含该模块:
应用程序:
define (require) ->
app = {}
app.Models = {}
app.Collections = {}
app.Views = {}
app.Router = {}
return app
主要:
require.config
...
require [
'app'
'backbone'
'router'
], (MyApp, Backbone, AppRouter) ->
MyApp.Router = new AppRouter
Backbone.history.start();
MyApp.Router.navigate ...
这是一个简单的演示:http://jsfiddle.net/Hc7ed/
我应该补充一点(特别是如果您是从头开始),在使用 Require.js 时不需要使用命名空间;这些模块不会污染全局命名空间。
关于javascript - BackboneJS、RequireJS 应用程序模块可从整个项目访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302716/