我在尝试使用RequireJS和BackboneJS构建Web应用程序时,试图找出问题的“最佳实践”解决方案。
我的应用需要(在启动时或很快之后)为大部分数据清理服务,然后解析该数据。
显然,我希望我的模型能够获取数据并将其解析(进入多个子模型),但我磕磕绊绊的是如何让我的模型保持持久性。 BackboneJS让人觉得应该使用View动态实例化模型,但这在我的场景中不起作用。
此外,由于RequireJS将所有内容隔离到全局命名空间之外的模块中,我正在努力解决如何使我的持久模型可用于我的视图 - 我应该使用Singleton模式吗?如果是这样,有没有关于如何避免与RequireJS的循环依赖问题的建议?
答案 0 :(得分:1)
您可以在视图外创建长寿命模型并将其传递到:
var view = new MyView({model: theModelInstance});
当您摆脱视图时,您需要记住解除可能阻止视图被垃圾回收的所有事件。
答案 1 :(得分: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没有全局名称空间污染,但这并不妨碍你绕过像这样的对象,好像它是一个全局的。希望这可以解决一些问题!