【问题标题】:can call fetch but not other Backbone collection methods可以调用 fetch 但不能调用其他 Backbone 收集方法
【发布时间】:2013-03-31 03:13:12
【问题描述】:

在我的带有 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')我试图调用创建的这个对象是什么,我能做些什么来解决这个问题.. .

【问题讨论】:

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

标签: backbone.js


【解决方案1】:

问题是我正在扩展模型

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

而不是一个集合

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多