在javascript中使用主干js时如何创建模型对象
我的问题是我想用javascript创建模型的对象 我想全局共享模型对象,因为我需要在许多js文件中使用该对象在javascript中使用主干js时如何创建模型对象,javascript,backbone.js,javascript-objects,Javascript,Backbone.js,Javascript Objects,我的问题是我想用javascript创建模型的对象 我想全局共享模型对象,因为我需要在许多js文件中使用该对象 (function(){ this.mymodel=Backbone.Model.extend({ ---- ---- }); return{ var colobj = new mymodel; } }) 我在另一个js文件中共享“colobj”对象,如下所示 (function()
(function(){
this.mymodel=Backbone.Model.extend({
----
----
});
return{
var colobj = new mymodel;
}
})
我在另一个js文件中共享“colobj”对象,如下所示
(function(){
var collectionobj = new colobj;
});
但是这给了我一个错误在这个例子中有什么错误首先,你应该改变这一行:
var colobj = new mymodel;
到
问题是,mymodel
未定义,这可能是问题的根源
此外,您的第一个colobj
是您的模型的一个实例,因此它是一个对象而不是构造函数。这就是为什么第二次尝试实例化它时:
var collectionobj = new colobj;
它会抛出一个错误,因为浏览器认为您正在执行以下操作:
var collectionobj = new (new mymodel);
我建议您仅将模型定义从一个闭包传递到另一个闭包:
//...
return{
var colobj = this.mymodel;
}
//...
更新我很惊讶地看到,我以前错过了这个。
您返回的对象无效:
{var colobj = new mymodel;}
{colobj : this.mymodel};
我认为您可能想返回一个对象,该对象将colobj
属性与您的模型值进行散列。如果是这种情况,则只需返回此对象:
{var colobj = new mymodel;}
{colobj : this.mymodel};
首先,您应该更改此行:
var colobj = new mymodel;
到
问题是,mymodel
未定义,这可能是问题的根源
此外,您的第一个colobj
是您的模型的一个实例,因此它是一个对象而不是构造函数。这就是为什么第二次尝试实例化它时:
var collectionobj = new colobj;
它会抛出一个错误,因为浏览器认为您正在执行以下操作:
var collectionobj = new (new mymodel);
我建议您仅将模型定义从一个闭包传递到另一个闭包:
//...
return{
var colobj = this.mymodel;
}
//...
更新我很惊讶地看到,我以前错过了这个。
您返回的对象无效:
{var colobj = new mymodel;}
{colobj : this.mymodel};
我认为您可能想返回一个对象,该对象将colobj
属性与您的模型值进行散列。如果是这种情况,则只需返回此对象:
{var colobj = new mymodel;}
{colobj : this.mymodel};
在我看来,你不明白什么是闭包,以及如何使用闭包 你有几个选择来做你想做的事 首先,您可以使用全局对象跨文件共享对象。像这样:
// model.js
(function(exports, Backbone, undefined) {
var Model = Backbone.Model.extend({});
exports.Model = Model;
})(window, Backbone);
// collection.js
(function(exports, Backbone, _, undefined) {
var Model = exports.Model;
var Collection = Backbone.Collection.extend({
model: Model
// ...
});
exports.Collection = Collection;
})(window, Backbone, _);
或者这个:
// model.js
Model = (function(Backbone, undefined) {
var Model = Backbone.Model.extend({});
return Model;
})(Backbone);
// collection.js
Collection = (function(Backbone, _, undefined) {
var Collection = Backbone.Collection.extend({
model: Model
// ...
});
return Collection;
})(Backbone, _);
或者,您可以在全局空间中创建一个对象,并将其用作命名空间
// model.js
(function(App, Backbone, undefined) {
var Model = Backbone.Model.extend({});
App.Model = Model;
})(App = (window.App || {}), Backbone);
// collection.js
(function(App, Backbone, _, undefined) {
var Model = App.Model;
var Collection = Backbone.Collection.extend({
model: Model
// ...
});
App.Collection = Collection;
})(App = (window.App || {}), Backbone, _);
或者您可以将对象定义为,然后使用任何AMD加载程序。例如,如果您想使用require.js,可以编写如下内容:
// main.js
require.config({
paths: {
'jquery': '/js/vendor/jquery.js',
'underscore': '/js/vendor/underscore.js',
'backbone': '/js/vendor/backbone.js',
'model': '/js/model.js',
'collection': '/js/collection.js'
},
shim: {
backbone: {
deps: ["underscore", "jquery"],
exports: "Backbone"
},
underscore: {
exports: "_"
}
}
});
// model.js
define([
'jquery',
'underscore',
'backbone'
], function($, _, Backbone){
var Model = Backbone.Model.extend({});
return Model;
});
// collection.js
define([
'jquery',
'underscore',
'backbone',
'model'
], function($, _, Backbone, Model){
var Collection = Backbone.Collection.extend({
model: Model
});
return Collection;
});
在我看来,你不明白什么是闭包,以及如何使用闭包 你有几个选择来做你想做的事 首先,您可以使用全局对象跨文件共享对象。像这样:
// model.js
(function(exports, Backbone, undefined) {
var Model = Backbone.Model.extend({});
exports.Model = Model;
})(window, Backbone);
// collection.js
(function(exports, Backbone, _, undefined) {
var Model = exports.Model;
var Collection = Backbone.Collection.extend({
model: Model
// ...
});
exports.Collection = Collection;
})(window, Backbone, _);
或者这个:
// model.js
Model = (function(Backbone, undefined) {
var Model = Backbone.Model.extend({});
return Model;
})(Backbone);
// collection.js
Collection = (function(Backbone, _, undefined) {
var Collection = Backbone.Collection.extend({
model: Model
// ...
});
return Collection;
})(Backbone, _);
或者,您可以在全局空间中创建一个对象,并将其用作命名空间
// model.js
(function(App, Backbone, undefined) {
var Model = Backbone.Model.extend({});
App.Model = Model;
})(App = (window.App || {}), Backbone);
// collection.js
(function(App, Backbone, _, undefined) {
var Model = App.Model;
var Collection = Backbone.Collection.extend({
model: Model
// ...
});
App.Collection = Collection;
})(App = (window.App || {}), Backbone, _);
或者您可以将对象定义为,然后使用任何AMD加载程序。例如,如果您想使用require.js,可以编写如下内容:
// main.js
require.config({
paths: {
'jquery': '/js/vendor/jquery.js',
'underscore': '/js/vendor/underscore.js',
'backbone': '/js/vendor/backbone.js',
'model': '/js/model.js',
'collection': '/js/collection.js'
},
shim: {
backbone: {
deps: ["underscore", "jquery"],
exports: "Backbone"
},
underscore: {
exports: "_"
}
}
});
// model.js
define([
'jquery',
'underscore',
'backbone'
], function($, _, Backbone){
var Model = Backbone.Model.extend({});
return Model;
});
// collection.js
define([
'jquery',
'underscore',
'backbone',
'model'
], function($, _, Backbone, Model){
var Collection = Backbone.Collection.extend({
model: Model
});
return Collection;
});
我仍然得到以下错误:缺少:在属性id var colobj=newthis.mymodel之后;在这一行中,但当我在另一个js中创建“colobj”对象时,它会给我“colobj未定义”错误..谢谢..我仍然得到以下错误:缺少:在属性id var colobj=new this.mymodel之后;在这行中,但当我在另一个js中创建“colobj”对象时,它会给我“colobj未定义”错误..谢谢。。。