【问题标题】:Persistent/Accessible BackboneJS Models with RequireJS带有 RequireJS 的持久/可访问的 BackboneJS 模型
【发布时间】:2012-04-13 21:51:07
【问题描述】:
在使用 RequireJS 和 BackboneJS 构建 Web 应用程序时,我正在尝试找出解决问题的“最佳实践”解决方案。
我的应用需要(在启动时或之后不久)清理服务以获取其大部分数据,然后解析该数据。
显然我希望我的模型获取数据并解析它(到多个子模型中),但我有点绊脚石的是如何让我的模型保持持久性。 BackboneJS 让人感觉模型应该使用 View 即时实例化,但这在我的场景中不起作用。
此外,由于 RequireJS 将所有内容隔离到全局命名空间之外的模块中,我正在努力解决如何使我的持久模型可用于我的视图 - 我应该只使用单例模式吗?如果是这样,是否有关于如何避免使用 RequireJS 的循环依赖问题的建议?
【问题讨论】:
标签:
javascript
model-view-controller
backbone.js
requirejs
【解决方案1】:
我的解决方案是创建一个模块,该模块创建一个简单的对象,我通过 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
然后只需将此模块包含在任何其他模块中,您就可以像使用全局对象一样使用 YourObj(在某种意义上)。您可以将实例化的主干视图保存到它,主干路由器以供将来操作......无论您喜欢什么。
RequireJS 将所有内容隔离到全局命名空间之外的模块中
只需将 RequireJS 视为为您的代码提供了一个很好的保护伞。 RequireJS 没有全局命名空间污染,但这并不能阻止您像传递全局对象一样传递这样的对象。希望这能把事情弄清楚一点!
【解决方案2】:
您可以在视图之外创建长寿命模型并将它们传入:
var view = new MyView({model: theModelInstance});
当你摆脱视图时,你需要记住取消所有可能阻止视图被垃圾收集的事件。