2013-03-10 10 views
2

我已經按照Ember.js上的PeepCode教程進行了擴展,並將其從選項卡中刪除。我還在服務器上實現了一個簡單的RESTful接口來保存更改,並使用DS.RESTAdapter。Ember.js推薦的方法從集合中刪除項目並保留爲REST

有2種relavent型號:

  • TabItem的
  • 標籤,上面的hasMany關係的TabItem

從教程上之後,我添加了一個簡單的刪除鏈接標籤模板:

<script type="text/x-handlebars" data-template-name="tab"> 
    <ul id="customer-tab"> 
    {{#each tabItem in tabItems}} 
    <li> 
     <h3><a href="#" {{ action "removeTabItem" tabItem }}>x</a> {{ tabItem.food.name }} <span>{{ money tabItem.cents}}</span></h3> 
    </li> 
    {{ else }} 
     <li><h3>Click a food to add it</h3></li> 
    {{/each}} 
    <li id="total"> 
     <h3>Total <span>{{ money cents }}</span></h3></li> 
    </li> 
    </ul> 
</script> 

而在控件ř

App.TabController = Ember.ObjectController.extend({ 
    removeTabItem: function(tabItem) { 
    var store = this.get('store'); 
    store.transaction(); 
    var t = store.find(App.TabItem,tabItem.get('id')); 
    t.deleteRecord(); 
    this.get('tabItems').removeObject(tabItem); 
    store.commit(); 
    } 
}); 

上述控制器代碼我確實由位試驗&誤差&猜測。 「removeObject」調用似乎有必要從用戶界面中正確刪除項目,並且「deleteRecord」調用似乎是必需的,因此「commit」將導致DELETE調用服務器。

儘管控制器代碼似乎有點冗長,我懷疑我錯過了一些東西。有沒有更好的方法,可能更直接地使用「tabItem」,並使用更少的API調用?

回答

0

要回答我的問題:

  • 行:

    var t = store.find(App.TabItem,tabItem.get('id')); 
    

    當時正好是不必要的,而且我可能只是使用的TabItem傳遞給方法。所以我現在TabController是:

    App.TabController = Ember.ObjectController.extend({ 
        removeTabItem: function(tabItem) { 
        var store = this.get('store'); 
        store.transaction(); 
        tabItem.deleteRecord(); 
        store.commit(); 
        } 
    }); 
    
  • 的標籤模型到TabItem的一個「的hasMany」的關係,但沒有自動回關係,因此,當一個TabItem的改變(或已被刪除),那麼我在TabItem被刪除後,懷疑Tab沒有「知道」重繪自己。向TabItem添加「belongsTo」關係似乎對此進行了排序。

    App.TabItem = DS.Model.extend({ 
        tab: DS.belongsTo('App.Tab'), 
        cents: DS.attr('number'), 
        food: DS.belongsTo('App.Food') 
    }); 
    
+0

我經歷了類似的過程去。我發現我還需要爲每個tabItem設置燈具數據中的選項卡。我看到的問題是,所有tabItems被刪除,而不是隻有一個項目。你也看到了嗎? – 2013-03-24 16:00:21

+0

@JasonMoore我檢查過了,我從來不需要在tabItems的fixture數據中設置tab。此外,我有問題的「一半」刪除項目,數據消失,但列表項仍然存在,但我沒有與所有項目被刪除的問題。 – 2013-03-24 16:41:59

+0

我在刪除操作中添加了一個斷點,並通過檢查'tabItem.get('tab')'夾具數據沒有定義選項卡,但動態創建的項目可以。 我想我知道你的意思與'一半'刪除項目 - 該項目被刪除,但價格仍然是吧?我想知道是否有某種訂單問題,在物品被移除之前重新計算價格。 我在另一一下表格,然後回表4(與固定數據)時也得到一個錯誤:「無法調用未定義的方法‘hasOwnProperty’」。你在桌子之間移動時也看到了嗎? – 2013-03-25 12:31:32