2013-10-28 73 views
0

後使用以下語法創建一個記錄,將其添加到存儲immidiatly:如何記錄添加到存儲它保存

store.createRecord('post', {title: "Rails is omakase"}); 

什麼是成功地存儲在服務器上的記錄和方式只有將其添加到商店?

我希望store.createRecord返回一個承諾。很混亂。

回答

0

對於你提到的我猜你是直接調用服務器(而不是通過REST適配器)。如果是這樣的話,您可以:

var store = store; 
$.ajax(url, {type: 'POST', success: function (savedRecord) { 
    var pushedRecord = store.push(App.MyModel, savedRecord); 
    pushedRecord.save(); 
}); 
+0

並不是所有的燼數據的全部重點。如果您已經手動保存,爲什麼要在記錄上調用保存? – Denzo

+0

如果服務器中不存在新的東西,則會使用createRecord,但只會將其添加到商店中。由於所有這些都是在商店的內存中同步完成的,因此無需返回承諾。推送會將現有記錄添加到商店。在這兩種情況下,保存將實際轉到適配器並保持內存更改。我假設你沒有使用REST適配器,因爲你說過要先將它保存到服務器,然後將其添加到商店。你能否擴展你的用例以提供更好的答案? –

+0

這是http://discuss.emberjs.com/t/why-does-store-createrecord-create-a-record-immediately/3161/2 – Denzo

1

人們可以爭辯說,在您的本地存儲具有「潛在」的記載是沒有問題的,但有他們在準備用於顯示保存在列表中顯示出來記錄。

所以,我做了一個組件使用時,我只想顯示保存的記錄:

應用程序/組件/每-saved.js

import Ember from 'ember'; 

const EachSavedComponent = Ember.Component.extend({ 

    tagName: '', 

    savedRecords: Ember.computed.filterBy('records', 'isNew', false) 

}); 

EachSavedComponent.reopenClass({ 
    positionalParams: ['records'] 
}); 

export default EachSavedComponent; 

應用/模板/組件/每個-saved.hbs

{{#each savedRecords as |record|}} 
    {{yield record}} 
{{/each}} 

用法

<div class="CARD"> 
    <table class="LIST"> 
    {{#each-saved model.users as |user|}} 
     <tr> 
     <td class="LIST-cell">{{user.name}}</td> 
     <td class="LIST-cell--right"><a href="" class="BUTTON">Remove</a></td> 
     </tr> 
    {{/each-saved}} 
    </table> 
</div> 

我不需要它到處都有,並且有幾種情況下我希望未保存的記錄顯示在列表中。

相關問題