Javascript 带有RequireJS的持久/可访问BackboneJS模型

Javascript 带有RequireJS的持久/可访问BackboneJS模型,javascript,model-view-controller,backbone.js,requirejs,Javascript,Model View Controller,Backbone.js,Requirejs,当我用RequireJS和BackboneJS构建一个web应用程序时,我试图找出一个问题的“最佳实践”解决方案 我的应用程序需要(在启动时或之后不久)清除服务中的大部分数据,然后解析这些数据 显然,我希望我的模型能够抓取数据并将其解析(分解为多个子模型),但我遇到的一点障碍是如何让我的模型保持持久性。BackboneJS让人觉得模型应该在运行时用视图实例化,但这在我的场景中不起作用 此外,由于RequireJS将所有内容隔离到全局名称空间之外的模块中,因此我正在努力解决如何使我的持久化模型可用

当我用RequireJS和BackboneJS构建一个web应用程序时,我试图找出一个问题的“最佳实践”解决方案

我的应用程序需要(在启动时或之后不久)清除服务中的大部分数据,然后解析这些数据

显然,我希望我的模型能够抓取数据并将其解析(分解为多个子模型),但我遇到的一点障碍是如何让我的模型保持持久性。BackboneJS让人觉得模型应该在运行时用视图实例化,但这在我的场景中不起作用


此外,由于RequireJS将所有内容隔离到全局名称空间之外的模块中,因此我正在努力解决如何使我的持久化模型可用于我的视图——我是否应该只使用Singleton模式?如果是这样的话,对于如何避免循环依赖性问题,有什么建议吗?

您可以在视图之外创建您的长寿命模型,并将其传入:

var view = new MyView({model: theModelInstance});

当您删除视图时,您需要记住取消钩住所有可能阻止视图被垃圾收集的事件。

我的解决方案是创建一个模块,创建一个简单的对象,我将require.js传递给所有其他模块

例如,创建yourobject.js并将其包含在所有模块中。在yourobject.js中,只需创建并返回一个对象

# coffeescript
define [], () ->
  YourObj = 
    # you can put all kinds of things in here or just leave it empty
    init: ->
      # i usually put my app init/backbone bootstrapping code 
      # here then call it in the app module

  # and return it
  YourObj
然后,只要将这个模块包含在任何其他模块中,您就可以使用您的OBJ,就好像它是一个全局对象一样(在某种意义上)。您可以将实例化的主干视图保存到它,主干路由器供将来操作。。。你喜欢什么都行

RequireJS将所有内容隔离到全局命名空间之外的模块中

只要把RequireJS看作是为代码提供了一把漂亮的保护伞。RequireJS没有全局名称空间污染,但这并不妨碍您像传递全局名称空间一样传递这样的对象。希望这能把事情弄清楚一点