2013-03-31 52 views
0

在我與一個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' 

的代碼甚至沒有嘗試進行網絡請求,因爲它不認爲它具有創造方法的錯誤。您會注意到我在創建集合之前創建了一個集合的控制檯日誌,並且它返回了一組作業(這是在我將骨幹添加到應用程序之前創建的),因此它是一個集合。

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 

在控制檯中,我實例化一個新的集合,稱爲獲取,檢索到的一些成果,並試圖在它的一些其他的收集方法,如collection.at(0),被告知該對象沒有按」沒有方法'at'。

奇怪的是,這個代碼(鏈接到一個集合的形式),我從我的另一個工作骨幹的應用程序複製的代碼。所以,如果我能夠調用fetch();在實例化該對象之後,但不調用其他Backbone集合方法(例如「at」和「create」),我試圖調用此對象創建的對象,以及我可以如何解決該問題。 。

+0

如果'this.collection.job'是你的實際徵收,嘗試'this.collection.job .create' – HungryCoder

+0

我做了this.collection.create({...因爲我試圖調用col的create方法(這是視圖有一個引用)(這是我如何在我的其他應用程序中工作),而不是在實際集合的名稱上調用create(即,視圖被引用)。 this.collection.job.create)。但是,我嘗試了你的建議,並說:':無法讀取未定義的屬性'工作'。我認爲我的方式應該是它的工作方式。您可以通過執行this.model.render()來調用視圖實例化的集合/模型的方法。等等 – Leahcim

回答

0

問題是,我是延伸的模型

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

,而不是一個集合

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