我有一个模型需要由多个视图访问,并在模型模块的定义中完成此操作,我将立即实例化它,如下所示:
define([
'jquery',
'underscore',
'backbone'
], function(_, Backbone) {
var Foo = Backbone.Model.extend({
// wondrous methods and properties
});
return new Foo();
});
我只需要这个模型的一个实例——现在就是这样。据我所知,解决方法是有一个单独的App
模块。就像是:
define([], function() {
var App = {
routers: {},
models: {},
views: {}
};
return App;
});
您可以在其上实例化和存储应用程序启动时对对象的引用:
require([
'App',
'Foo'
], function(App, Foo) {
App.models.foo = new Foo();
});
但我觉得这是一个糟糕的选择,因为你基本上要回到拥有一个全局命名空间——这是 RequireJS 应该帮助避免的事情。
是否有任何替代方案,是否有充分的理由避免使用如上所述的单例模型?