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 主干及;Require:Require块中设置的模型属性not";粘住;不受限制_Backbone.js_Requirejs - Fatal编程技术网

Backbone.js 主干及;Require:Require块中设置的模型属性not";粘住;不受限制

Backbone.js 主干及;Require:Require块中设置的模型属性not";粘住;不受限制,backbone.js,requirejs,Backbone.js,Requirejs,我有一个主干模型,它通过requirejs加载了一些依赖项。我用这种方式处理它,是为了绕过Require.js的循环依赖性问题。(我们有多个需要模型、集合和视图的文件,其中一些是循环文件。) 问题在于,模型上设置的属性(this)在require语句之外显示为未定义的属性。代码如下: define(["jquery", "backbone"], function($, Backbone) { var Model = Backbone.Model.extend({ ini

我有一个主干模型,它通过requirejs加载了一些依赖项。我用这种方式处理它,是为了绕过Require.js的循环依赖性问题。(我们有多个需要模型、集合和视图的文件,其中一些是循环文件。)

问题在于,模型上设置的属性(
this
)在require语句之外显示为
未定义的属性。代码如下:

define(["jquery", "backbone"],
function($, Backbone) {
    var Model = Backbone.Model.extend({

        initialize: function(options) {
            var that = this;
            require(["collections/agenciesCollection", "collections/usersCollection", "models/userModel"], function(Agencies, Users, User) {
                that.agencies = (!options || !options.agencies) ? new Agencies() : new Agencies(options.agencies);
                that.users = (!options || options.users) ? new Users() : new Users(options.users); 
                if(!options || !options.contact) that.set("contact", new User()); else that.set("contact", new User(options.contact));
                if(!options || !options.admin) that.set("admin", new User()); else that.set("admin", new User(options.contact));
                console.log(that.agencies); // This is set to a collection
            });
            console.log(this.agencies); // This is 'undefined'
            console.log(this); // This has an attribute "agencies" listed in Chrome inspector
        }
  return Model;
});

您正在构造函数中使用async
require
调用,因此在尝试将值记录到控制台时尚未定义属性

这些线路:

console.log(this.agencies); // This is 'undefined'
console.log(this); // This has an attribute "agencies" listed in Chrome inspector
正在执行此操作之前的操作:

console.log(that.agencies); // This is set to a collection
更新

根据您最后的评论,我想给您举一个例子,说明如何简化模块定义依赖项列表。您可以尝试像这样要求依赖项:

define(function (require) {
  var $ = require("jquery");
      backbone = require("backbone");
      agencies = require("collections/agenciesCollection");
      users = require("collections/usersCollection");
      userModel = require("models/userModel");

  // TODO: define your exports using the required dependencies
});

这也可能有助于解释加载依赖项的不同方式:

是的,这似乎就是问题所在。我最终使用了一个变通方法来尝试和处理它。我建议您只需在您的
定义
依赖项列表中包含
“集合/代理集合”、“集合/用户集合”、“模型/用户模型”
。根据您发布的代码,没有明显的理由调用构造函数中的
require
。该
define
依赖项列表是此文件中加载内容的一个非常小的子集。它相当长,因此有理由打破这一切。