javascript - BackboneJS、RequireJS 应用程序模块可从整个项目访问

标签 javascript ruby-on-rails backbone.js requirejs

在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/

相关文章:

javascript - 事件的 Backbone Marionette 命名空间约定 - 风格指南

javascript - 如何在唯一键内获取Firebase数据库嵌套数据访问

javascript - 如何选择所有f :selectItems inside p:selectOneRadio with javascript in JSF?

ruby-on-rails - 'dynamic'搜索的编程语言?

ruby-on-rails - Zeus 在运行 RSpec 时抛出错误

backbone.js - Backbone,Jasmine - 如何在没有副作用的情况下独立运行测试?

javascript - 正确使用 Backbone.js 和 Marionette 对集合进行分组

javascript - 新数据的D3JS刷新图

javascript - imageSwap onClick 通过 javascript 未触发

ruby-on-rails - 创建 Rails 新应用程序项目时出错