我是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
};
}
});
});
答案 0 :(得分:5)
您可以将新创建的对象固定到您正在使用的现有全局对象,例如Backbone
:
Backbone.Model.definitions = {
loginModel : Backbone.Model.extend({...})
}
并将其用作:
new View({model : Backbone.Model.definitions.loignModel});
它可能不是最短方式,但它比使用不同变量污染全局命名空间更清晰。
答案 1 :(得分:1)
我没有附加到Backbone.Model
原型或全局window
范围,而是将其附加到单独的app
对象(由骨干 - 样板和大多数其他对象提供)实现)。
然后,您可以在需要访问当前用户上下文的任何其他模块中使用app
对象。
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
});
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