2014-01-21 51 views
1

我正在使用backbone的集合模型來顯示骨幹視圖上的字符串排序列表。這裏是模型和比較:當使用比較器時,骨幹集合是半排序

var MenuItems = Backbone.Collection.extend({ 
    comparator: function (a, b) { 
    if (a.get('name') < b.get('name')) { 
     return 1; 
    } else if (b.get('name') > a.get('name')) { 
     return -1; 
    } 
    }, 

    model: MenuItem, 
    url: '/items' 
}); 

當代碼運行,只有在列表中的12條的前六個排序,其餘部分保持無序。當使用comparator: 'name'時,列表完全排序,但是當使用某個函數時,會發生此問題。

任何人都知道爲什麼會發生這種情況?這可能是一個Backbone錯誤嗎?我正在使用Backbone 1.1.0

+0

你可以發佈正在排序的名稱項目嗎? – Divey

+3

[「sort」比較函數有兩個模型,如果第一個模型應該在第二個模型之前返回-1,如果它們具有相同的等級,則返回0;如果第一個模型應該在第二個模型之後,則返回1。 /backbonejs.org/#Collection-comparator)。您錯過了三種情況之一,所以所有投注都關閉。 –

+0

@Divey:{Chili con carne,芝士漢堡,披薩,凱撒沙拉,花園沙拉,布朗尼,胡蘿蔔,芝士蛋糕,青豆,土豆泥,意大利麪和肉丸,番茄沙拉}正在分類爲{Carrots,Tomato salad,Spaghetti and肉丸,披薩,土豆泥,青豆,花園沙拉,辣椒肉醬,芝士蛋糕,芝士漢堡,凱撒沙拉,布朗尼} – Branka

回答

5

這是一個工作代碼。

var MenuItems = Backbone.Collection.extend({ 
    comparator: function (a, b) { 
     if (a.get('name') < b.get('name')) { 
      return -1; 
     } else if (a.get('name') > b.get('name')) { 
      return 1; 
     } 
    } 
}); 

這裏的jsfiddle與輸出,這樣就可以比較http://jsfiddle.net/ek44Z/2/

主要問題是與功能內容。您需要在if聲明中返回-1,並在else if中比較ab,並返回1。基本上你的else if從未被稱爲。

有一個很好的編碼。

+0

糟糕8 |謝謝! – Branka