制作骨干模型&使用requireJS全局可用的集合

时间:2013-06-05 05:27:41

标签: backbone.js requirejs backbone-views backbone-routing

我是Web应用程序开发的新手。我有一个名为LoginModel的骨干模型。我想创建它的一个对象,并使其可以从动态加载的任何Backbone View进行全局访问。这是我的模特......

define(['underscore', 'backbone'], function(_, Backbone) {
    LoginModel = Backbone.Model.extend({
        initialize: function(){ },
        defaults:{
            userName: 'undefined',
            userID: 'undefined'
        },
        urlRoot: 'https://xxxx.xx.xxxxxx',
        parse: function(response, options){
            return{
                userName: response.userName,
                userId:response.userId
            };
        }
    });
});

3 个答案:

答案 0 :(得分:5)

您可以将新创建​​的对象固定到您正在使用的现有全局对象,例如Backbone

Backbone.Model.definitions = {
    loginModel : Backbone.Model.extend({...})
}

并将其用作:

new View({model : Backbone.Model.definitions.loignModel});

它可能不是最短方式,但它比使用不同变量污染全局命名空间更清晰。

答案 1 :(得分:1)

我没有附加到Backbone.Model原型或全局window范围,而是将其附加到单独的app对象(由骨干 - 样板和大多数其他对象提供)实现)。

然后,您可以在需要访问当前用户上下文的任何其他模块中使用app对象。

应用程序/ app.js

define(function(require, exports, module) {
    "use strict";

    var app = module.exports;

    // Initialize configuration and context objects
    app.root = "/";
    app.currentUser = null; //will be initialized in app/main.js
});

应用程序/ main.js

require(["config"], function() {
    require(["app", "LoginModel", "router"], function(app, models, Router) {
        app.currentUser = new LoginModel();
        app.currentUser.fetch();

        app.router = new Router();
    })
});

答案 2 :(得分:-1)

只需创建模型的全局实例,例如

var globalLoginModel = new LoginModel();

window.globalLoginModel = new LoginModel();

然后将其传递到您要在其中使用的任何视图中,例如

new View1({ model : globalLoginModel });
new View2({ model : globalLoginModel });
new View3({ model : globalLoginModel });

应该是它。

d