所有视图都可以使用的Backbone JS中央模型

时间:2012-04-02 15:34:40

标签: javascript backbone.js requirejs

我是骨干js的新手并且需要js。

我使用requirejS将我的骨干代码组织成模块。我不知道这对我想要的东西是否有任何重要性。我想要一个中央模型,我的所有视图都可以访问。他们应该能够获得和设定价值。我不想将它用作每个视图模型。我需要保留内存搜索选项,用户状态(登录/注销)等。

有什么想法吗?

修改

也许答案就在这里?

Share resources across different amd modules

2 个答案:

答案 0 :(得分:4)

如果我已经很清楚你想要什么,我会说你在几个Model中只有一个Views并不需要特别的东西,只需这样做:

// code simplified and no tested
App.Model = Backbone.Model.extend({});
App.View  = Backbone.View.extend({});

var myModel = new App.Model();
var viewOne = new App.View({ model: myModel });
var viewTwo = new App.View({ model: myModel });

在评论解释后更新

您可以将自定义参数传递给View.initialize

// code simplified and no tested
App.Model       = Backbone.Model.extend({});
App.CommonModel = Backbone.Model.extend({});

App.View = Backbone.View.extend({
  initialize: function( opts ){
    this.commonModel = opts.commonModel;
  }
});

var myModelOne    = new App.Model();
var myModelTwo    = new App.Model();
var myCommonModel = new App.CommonModel();

var viewOne = new App.View({ model: myModelOne, commonModel: myCommonModel });
var viewTwo = new App.View({ model: myModelTwo, commonModel: myCommonModel });

答案 1 :(得分:2)

使用requirejs,我会创建一个定义单例模型的模块,假设 app / settings.js

define(['backbone'], function (Backbone) {
    var Settings = Backbone.Model.extend({
    });

    return new Settings();
});

并将其拉入我的其他模块,例如

define(['backbone', 'app/settings'], function (Backbone, settings) {
    settings.set("pref", "my pref");
});

app / settings.js 的后续调用将返回相同的对象。