Javascript 未捕获类型错误:无法读取属性';[对象对象]';将模型添加到集合时未定义的

Javascript 未捕获类型错误:无法读取属性';[对象对象]';将模型添加到集合时未定义的,javascript,jquery,backbone.js,underscore.js,Javascript,Jquery,Backbone.js,Underscore.js,我正在使用主干1.1.2和下划线1.3.3以及JQuery 1.7.1创建一个存储3个值(x、y和z)的模型,将此模型放在集合中,并使用模块化方法将集合放在视图中 以下是我的密码: app.js <code> requirejs.config({ paths : { app : '/app', jquery : ["http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min"],

我正在使用主干1.1.2和下划线1.3.3以及JQuery 1.7.1创建一个存储3个值(x、y和z)的模型,将此模型放在集合中,并使用模块化方法将集合放在视图中

以下是我的密码:

app.js

<code>
requirejs.config({
    paths : {
        app : '/app',
        jquery : ["http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min"],
        underscore : ["http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min"],
        backbone : ["https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min"]
    },
    shim : {
        jquery : {
            deps : [],
            exports : '$'
        },
        underscore : {
            deps : [],
            exports : '_'
        },
        backbone : {
            deps : ['jquery', 'underscore'],
            exports : 'Backbone'
        }
    }
});
</code>
main.js

<code>
define(function(require) {

    var DataSet = require('./model/DataModel.js');

    var DataCollection = require('./collection/DataCollection.js');
    var DataView = require('./view/DataViews.js');
});
</code>
DataModel.js

<code>
define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {

    var DataSet = Backbone.Model.extend({
        initialize : function() { xVal:0; yVal:0; zVal:0;
            alert("at model");
        },

        defaults : {

            xVal : 0,
            yVal : 0,
            zVal : 0
        }
    });

    return DataSet;

});
</code>

DataCollection.js

<code>
    define(['jquery', 'underscore', 'backbone', '../model/DataModel.js'],   function($, _, Backbone, DataSet) {

    var DataSetCollection = Backbone.Collection.extend({
        model : DataSet,

        view : null,

        initialize : function() {

        },

        constructor : function() {
            console.log('Book\'s constructor had been called');
        }
    });

    return DataSetCollection;

});
</code>
DataView.js

<code>
    define(['jquery', 'underscore', 'backbone', '../collection/DataCollection.js', '../model/DataModel.js'], function($,   _, Backbone, DataCollection, DataSet) {
      //  ... ,  /collection/DataCollection.js
        DataView = Backbone.View.extend({

        tagName : 'li',

        events : {
            'click #add-input' : 'getAxisValues',
        },

        initialize : function() {
            alert("Initializing View");
            //this.cars = new CarsCollection;
            this.dataCollection = new DataCollection;
            _.bindAll(this, 'render');
        },

        getAxisValues : function() {

            /*
            var xVal = $('#inputX').val();
            var yVal = $('#inputY').val();
            var zVal = $('#inputZ').val();*/

            //adding random values for now for testing
            var dataSet = new DataSet({
                xVal : 4,
                yVal : 5,
                zVal : 6
            });
            alert("Adding values to collection " + dataSet.cid);
            this.dataCollection.push(dataSet);
        },

        render : function(model) {
            alert("Rendering View");

        }
    });
    var view = new DataView({
        el : '#FirstShow'
    });
    return view;
    });
</code>

截至目前,Router.js文件为空,稍后将在项目中使用

我得到的错误是

Uncaught TypeError: Cannot read property '[object Object]' of undefined                       backbone.js:806 
i.extend.get                            backbone.js:694 
i.extend.set                            backbone.js:638 
i.extend.add                            backbone.js:776 
i.extend.push                           DataViews.js:32 
Backbone.View.extend.getAxisValues      jquery.min.js:3 
f.event.dispatch                        jquery.min.js:3 
f.event.add.h.handle.i                  jquery.min.js:3 
在我的代码中,错误出现在以下行:

this.dataCollection.push(数据集)

我之前也试过以下方法

this.dataCollection.add(数据集)


谢谢

在您的代码中,您遇到了一些问题
1) 您只需在三个点中创建一个模型。
2) 您并没有真正初始化集合。代码应该是这样的

this.dataCollection = new DataCollection();

所以,如果您想在集合中添加三个模型,只需编写

 this.dataCollection = new DataCollection([{xVal : 4},{yVal : 5},{zVal : 6,}])

我收到了同样的错误信息。虽然我的案例与此不完全相同,但将我的解决方案放在这里可能会很有用

我的解决方案是使用
初始化
而不是
构造函数
,避免向数组中添加模型或检查当时未定义的数组中是否存在模型


以下是它们的区别:

我之前使用的是主干网0.9.2,错误是这样的:未捕获类型错误:无法读取未定义的属性“c4”,它从c1开始,然后是c2等等,每次我单击“添加输入”按钮并创建新模型时。在使用最新版本的主干网后,错误如前所述。我尝试过这样做,但仍然不起作用。还有什么我可以试试的吗?你也会犯同样的错误吗?提供一把小提琴这很容易。是的。我正试图找出一个解决办法,而不是一个确切的解决办法。我会发布一个小链接,给我一点时间来找出这个替代方法。谢谢