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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/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 可以调用fetch,但不能调用其他主干收集方法_Backbone.js - Fatal编程技术网

Backbone.js 可以调用fetch,但不能调用其他主干收集方法

Backbone.js 可以调用fetch,但不能调用其他主干收集方法,backbone.js,Backbone.js,在带有Rails后端的主干应用程序的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.Vi

在带有Rails后端的主干应用程序的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),然后被告知该对象没有方法“at”

奇怪的是,这个代码(链接到集合的表单)是我从我的另一个工作主干应用程序复制的代码


所以,如果我能够调用fetch();在实例化该对象之后,但不调用其他主干收集方法(如“at”和“create”)我尝试调用create的对象是什么,我可以做些什么来修复该问题…

问题是我扩展了一个模型

app.Collections.job = Backbone.Model.extend({
而不是收藏

app.Collections.job = Backbone.Collection.extend({

如果
this.collection.job
是您的实际集合,请尝试
this.collection.job.create
我这样做了.collection.create({…因为我试图调用视图实例化时使用的集合的create方法(视图引用了该方法)(这是我在其他应用程序中使其工作的方式),而不是对实际集合的名称(即this.collection.job.create)调用create。但是,我尝试了您的建议,它说:“无法读取未定义的属性'job'。我认为我使用它的方式应该是它的工作方式。您可以通过这样做对视图实例化的集合/模型调用方法。model.render()等