在带有Rails后端的Backbone应用程序的app.js文件中,我启动了一个集合,并在fetch()方法完成对记录的检索后将其设置为jobForm视图上的集合。
var app = {
init: function () {
this.collections.job = new this.Collections.job();
this.collections.job.fetch().complete(function(){
app.views.jobForm = new app.Views.jobForm({ collection : app.collections.job });
}
在jobForm视图(用户输入作业详细信息的视图)中,我在表单上侦听提交,然后使用该集合在表单提交上创建新作业。
events : {
'submit form' : 'addDoc'
},
addDoc : function(e) {
e.preventDefault();
// app.collections.job.create({
console.log(this.collection);
this.collection.create({
job_title : this.$('.job_title').val(),
position : this.$('.position').val(),
company : this.$('.company').val(),
}, { error : _.bind(this.error, this) });
但是,我收到错误
Uncaught TypeError: Object [object Object] has no method 'create'
代码甚至没有尝试发出网络请求,因为它认为它没有create方法。你会注意到我在创建它之前做了一个集合的控制台日志,它返回了一个作业集合(在我将骨干添加到应用程序之前创建的),所以它是一个集合。
child {cid: "c1", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
_changing: false
_pending: false
_previousAttributes: Object
attributes: Object
changed: Object
cid: "c1"
__proto__: Surrogate
constructor: function (){ return parent.apply(this, arguments); }
initialize: function () {
model: function (){ return parent.apply(this, arguments); }
url: "/jobs"
__proto__: Object
在控制台中,我实例化了一个名为fetch的新集合,检索了一些结果,并尝试了一些其他的集合方法,例如collection.at(0),并被告知该对象没有该方法'在'。
奇怪的是,这段代码(链接到集合的表单)是我从我的另一个工作Backbone应用程序复制的代码。
所以,如果我能够调用fetch();在实例化它之后对这个对象,但是没有调用其他的Backbone Collection方法(比如'at'和'create')我试图调用的这个对象是什么创建的,我该怎么做才能解决问题..
答案 0 :(得分:0)
问题是我正在扩展模型
app.Collections.job = Backbone.Model.extend({
而不是集合
app.Collections.job = Backbone.Collection.extend({