Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Backbone.js 如何使用requirejs和主干创建多个集合实例_Backbone.js_Collections_Requirejs - Fatal编程技术网

Backbone.js 如何使用requirejs和主干创建多个集合实例

Backbone.js 如何使用requirejs和主干创建多个集合实例,backbone.js,collections,requirejs,Backbone.js,Collections,Requirejs,我正在尝试创建一些通用模块,以便它可以在多个主干.Collection上重用,但我遇到了以下问题 我已经下载了作为我的应用程序模板,所以在/app/modules中,我创建了以下js /app/modules/collection.js(所有其他收藏的常用资料) /app/modules/users.js(从Collection.js扩展而来的用户集合) 在/app/modules/collection.js中,代码为: define([ "backbone" ], function(

我正在尝试创建一些通用模块,以便它可以在多个主干.Collection上重用,但我遇到了以下问题

我已经下载了作为我的应用程序模板,所以在/app/modules中,我创建了以下js

  • /app/modules/collection.js(所有其他收藏的常用资料)
  • /app/modules/users.js(从Collection.js扩展而来的用户集合)
在/app/modules/collection.js中,代码为:

define([
  "backbone"
],

function(Backbone) {

    var collection = Backbone.Collection.extend({

        pagination : { total : 0 },

        parse: function( response ) {

            if ( response.data ) {
                self.pagination.total = response.total;
                return response.data;
            } 

            return response;
        },

    });

    return collection;

});
define([
  "backbone",
  "modules/collection"
],

function(Backbone, Collection) {

    var users = Collection.extend({
        self: null,

        initialize: function( models, options ) {
            self = this;
        },

        getData: function() {
            this.fetch({
                success: function() {
                    console.log('ok');
                },
                error: function() {
                    console.log('error');
                }
            });
        }
    });

    return users;

});
define([
  "app",
  "modules/users"
],

function(app, Users) {

  var Router = Backbone.Router.extend({
    routes: {
      "": "index"
    },

    index: function() {
        var usersA = new Users([], {
          url: 'http://test.test.test./users_a.html'
        });
        usersA.getData();

        var usersB = new Users([], {
            url: 'http://dev.digbil.com/users_b.html'
        });    
        usersB.getData();
     }
  });

  return Router;

});
在/app/modules/users.js中,代码为:

define([
  "backbone"
],

function(Backbone) {

    var collection = Backbone.Collection.extend({

        pagination : { total : 0 },

        parse: function( response ) {

            if ( response.data ) {
                self.pagination.total = response.total;
                return response.data;
            } 

            return response;
        },

    });

    return collection;

});
define([
  "backbone",
  "modules/collection"
],

function(Backbone, Collection) {

    var users = Collection.extend({
        self: null,

        initialize: function( models, options ) {
            self = this;
        },

        getData: function() {
            this.fetch({
                success: function() {
                    console.log('ok');
                },
                error: function() {
                    console.log('error');
                }
            });
        }
    });

    return users;

});
define([
  "app",
  "modules/users"
],

function(app, Users) {

  var Router = Backbone.Router.extend({
    routes: {
      "": "index"
    },

    index: function() {
        var usersA = new Users([], {
          url: 'http://test.test.test./users_a.html'
        });
        usersA.getData();

        var usersB = new Users([], {
            url: 'http://dev.digbil.com/users_b.html'
        });    
        usersB.getData();
     }
  });

  return Router;

});
在my/app/router.js中,代码为:

define([
  "backbone"
],

function(Backbone) {

    var collection = Backbone.Collection.extend({

        pagination : { total : 0 },

        parse: function( response ) {

            if ( response.data ) {
                self.pagination.total = response.total;
                return response.data;
            } 

            return response;
        },

    });

    return collection;

});
define([
  "backbone",
  "modules/collection"
],

function(Backbone, Collection) {

    var users = Collection.extend({
        self: null,

        initialize: function( models, options ) {
            self = this;
        },

        getData: function() {
            this.fetch({
                success: function() {
                    console.log('ok');
                },
                error: function() {
                    console.log('error');
                }
            });
        }
    });

    return users;

});
define([
  "app",
  "modules/users"
],

function(app, Users) {

  var Router = Backbone.Router.extend({
    routes: {
      "": "index"
    },

    index: function() {
        var usersA = new Users([], {
          url: 'http://test.test.test./users_a.html'
        });
        usersA.getData();

        var usersB = new Users([], {
            url: 'http://dev.digbil.com/users_b.html'
        });    
        usersB.getData();
     }
  });

  return Router;

});
假设返回20条记录,那么在usersA.pagination.total中,它应该包含值20

假设返回50条记录,那么在usersA.pagination.total中,它应该包含值50

我的问题是usersA.pagination.total都包含值50,看起来第二个实例正在覆盖第一个实例

但是userA.models和userB.models都包含正确的数据记录,其中显示了我的usersA集合中的20个用户和我的userB集合中的50个用户

如果我单独执行它们,如:

define([
  "app",
  "modules/users"
],

function(app, Users) {

  var Router = Backbone.Router.extend({
    routes: {
      "": "index"
    },

    index: function() {
        var usersA = new Users([], {
          url: 'http://test.test.test./users_a.html'
        });
        usersA.getData();
     }
  });

  return Router;

});
userA.pagination.total包含正确的值20

define([
  "app",
  "modules/users"
],

function(app, Users) {

  var Router = Backbone.Router.extend({
    routes: {
      "": "index"
    },

    index: function() {
        var usersB = new Users([], {
            url: 'http://dev.digbil.com/users_b.html'
        });    
        usersB.getData();
    }
  });

  return Router;

});
userB.pagination.total包含正确的值50

不知道我哪里做错了


[编辑]如何更改代码,使每个唯一实例具有不同的分页值

[编辑]快速模型


[编辑]似乎问题出在“解析”函数中?

这是javascript对象的常见行为。在这里,您必须在每个集合中设置初始分页值
分页:{total:0}

扩展集合时,它不会创建副本,而是对
分页
值的引用


我应该如何更改代码以使每个唯一实例具有不同的分页值?我实际上在您的回答中尝试了该版本,我得到了相同的结果(在users.js或collection.js中定义的分页,或在users.js和collection.js中定义的分页)。我也尝试过不预定义分页,而只在users.initalize函数中创建它,并且在为两个实例运行getData之后,第一个实例pagination.total始终是默认值0。问题类似,第一个实例的pagination.total仍然等于零。我将尝试在JSFIDDLEVEN中放置代码。如果它起作用,它可能会破坏具有可重用集合的目的。js..@forest小丑添加
this.pagination={total:0}初始化
方法中的code>(最简单的解决方案)。另一个解决方案是将
默认值
更改为返回
默认值
集的函数。另一种解决方案是,每次更改
分页时创建一个新对象
(this.pagination=uu.clone(this.pagination).total=response.total;
)。