2014-03-02 66 views
0

我一直在使用前端的Backbone的Rails應用程序。它有兩種模式,出版物和文章。我在出版物骨幹路由器中編寫了以下函數,它應該刪除指定的出版物及其所有相關文章。它刪除了出版物,但我在刪除文章時遇到了問題。下面是代碼:主幹中的下劃線功能奇怪

publications_router.js

delete_publication: function(id){ 
    var publication = new SimpleGoogleReader.Models.Publication({id: id}); 
    publication.fetch(); 
    publication.destroy(); 


    var articles = new SimpleGoogleReader.Collections.Articles(); 

    articles.fetch({ 
     success: function(data){ 

     _.each(data.models, function(item){ 
      if (item.toJSON().publication_id == id) { 
      console.log(item); 
      } 
     }); 
     } 
    }); 

    } 

這個偉大的工程打印在控制檯的各項目。但是,如果我將console.log(item)行更改爲:

item.destroy(); 

它只會銷燬所有其他項目。很顯然,我想糾正這個問題,所以這個函數會破壞所有的東西,而不是所有的東西。

有人可以告訴我爲什麼會發生這種情況,我們可以做些什麼來解決它?

+0

它突變由陣列'splicing'一個元件出(該陣列被循環內的每個它破壞時間縮短)。你需要手動循環。 –

+0

你是什麼意思手動?請詳細說明:) – user2623706

回答

1

首先過濾掉你想銷燬的物品。

var tobeDeleted = _.filter(data.models, function(item){ 
      return (item.toJSON().publication_id == id); 
     }); 

...然後破壞

_.invoke(tobeDeleted, "destroy"); 
+0

'data'應該是一個集合,所以你可以'data.filter(function(item){...})'而不是搞亂'models'屬性。 'item'應該是一個模型,所以'item.get('publication_id')'會比'item.toJSON()。publication_id'更好。還有一個錯字:'_.filer'應該是'_.filter'。 –

+0

精美的作品!謝謝帕拉尼克! – user2623706

+0

不客氣。 @mu太短 - 謝謝。錯字是固定的。 我限制了對OP關於_的問題的迴應,並且沒有打算冒險進入骨幹模型。我認爲OP應該聽取您對良好做法的建議。 – palanik