Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中使用主干js时如何创建模型对象_Javascript_Backbone.js_Javascript Objects - Fatal编程技术网

在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()

我的问题是我想用javascript创建模型的对象 我想全局共享模型对象,因为我需要在许多js文件中使用该对象

 (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未定义”错误..谢谢。。。