Javascript 未捕获类型错误:无法读取属性';[对象对象]';将模型添加到集合时未定义的
我正在使用主干1.1.2和下划线1.3.3以及JQuery 1.7.1创建一个存储3个值(x、y和z)的模型,将此模型放在集合中,并使用模块化方法将集合放在视图中 以下是我的密码: app.jsJavascript 未捕获类型错误:无法读取属性';[对象对象]';将模型添加到集合时未定义的,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"],
<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等等,每次我单击“添加输入”按钮并创建新模型时。在使用最新版本的主干网后,错误如前所述。我尝试过这样做,但仍然不起作用。还有什么我可以试试的吗?你也会犯同样的错误吗?提供一把小提琴这很容易。是的。我正试图找出一个解决办法,而不是一个确切的解决办法。我会发布一个小链接,给我一点时间来找出这个替代方法。谢谢