2013-09-25 60 views
2

我的路由器定義如下:無法保存/使用燼數據更新記錄

this.resource('uoms', { path: '/uoms' }, function() { 
    this.route('new'); 
}); 

而且uoms路線定義爲:

App.UomsRoute = Ember.Route.extend({ 
    model: function() { 
     return this.store.find('uom'); 
    }, 

    actions: { 
     save: function() { 
      this.modelFor('uoms').save().then(function() { 
       console.log("saved UOMs"); 
      }); 
     } 
    } 
}); 

但由於某些原因,當我試着保存它我得到:

Uncaught TypeError: Object [object Object] has no method 'save'

有人可以幫助我確定我做錯了什麼?

---- ---- UPDATE

我還試圖從控制器,但具有相同的結果如下:

App.UomsController = Ember.ArrayController.extend({ 
    actions: { 
     save: function() { 
      this.get('model').save().then(function() { 
       console.log("saved UOMs"); 
      }); 
     } 
    } 
}); 

---- UPDATE 2 ----

望着由this.get('model')調用我們得到如下返回的對象:

回答

1

我快到的問題是,我是想叫save()的記錄數組,而不是一個單一的紀錄。這個問題的產生是因爲我在一個單獨的記錄上進行操作,但是在ArrayController中這樣做。我不認爲這有什麼問題,儘管可以說我應該創建了一個名爲「edit」的子路由,然後我的代碼邏輯可能會起作用。

這就是說,如果你要像我一樣做的(又名,保存ArrayController內的奇異記錄),那麼這個代碼將工作:

save: function(id) { 
    var promise = this.store.find('uom',id).then(function(uom){ 
     console.log(uom); 
     uom.save(); 
    }); 
} 

然後在模板中把這樣的事情:

<span class="glyphicon glyphicon-floppy-disk" {{action "save" id}}></span> 

這有效,但不是最好的答案。相反,您可以使用itemController屬性在ArrayController中指定ObjectController。下面是使用這種策略既save()deleteRecord()處理程序的一個例子:

App.PluralController = Ember.ArrayController.extend({ 
    itemController: 'singular' 
}); 

App.SingularController = Ember.ObjectController.extend({ 
    actions: { 
     save: function() { 
      this.get('model').save(); 
     }, 
     deleteRecord: function() { 
      this.get('model').deleteRecord(); 
      this.get('model').save(); 
     } 
    } 
}); 

那麼你要像做你的車把模板以下幾點:

<span class="glyphicon glyphicon-floppy-disk" {{action "save" this}}></span> 
<span class="glyphicon glyphicon-remove-circle" {{action "deleteRecord" this}}></span> 
+1

使用'.destroyRecord()'將刪除記錄並同時保存。 [Ember文檔](http://emberjs.com/guides/models/creating-and-deleting-records/) – Jadam

2

這是我會做什麼:

  • 使用Chrome開發者工具設置在該行斷點在您嘗試保存模型
  • 要檢查控制器持有的模式進入this.get('model')的Chrome開發者工具控制檯。

檢查控制檯輸出是否真的是你期望的。很可能它不是你想要保存的模型實例。當你在控制檯執行this.get('model').save()時,你會看到你會得到同樣的錯誤。

順便說一句:你爲​​什麼使用ArrayController而不是ObjectController。它看起來像你用它的單一模型。有關更多詳情,請參閱docs

編輯:

嘗試this.get('model').get('transaction').commit()

+0

計量單位是確實的ArrayController模型'Uom'。爲什麼你認爲它不是? – ken

+0

我會嘗試你建議的調試策略,看看我得到了什麼。謝謝。 – ken

+0

對我來說,目前還不清楚你的方案的外觀:你是否在模板中顯示多個項目?你是否在該模板中包含表單?表單是否允許編輯單個UOM實例或甚至多個項目?究竟是什麼觸發了「保存」操作? –