У меня есть приложение в позвоночнике, где я хочу сортировать коллекцию в базе с поплавком, но вместо этого сделать что-то вроде этого:
- 9,90
- 12,50
- 100,50
- 110,50
выполните следующие действия:
- 100,50
- 110,50
- 12,50
- 9,90
это моя модель:
LanguageModel = Backbone.Model.extend({});
моя коллекция:
LanguageCollection = Backbone.Collection.extend({
model: LanguageModel,
sort_key: 'price', // default sort key
initData: function(data){
return data;
},
comparator: function (item) {
return item.get(this.sort_key);
},
sortByField: function (fieldName) {
this.sort_key = fieldName;
this.sort();
}
});
мой взгляд:
var TourView = Backbone.View.extend({
initialize: function(){
this.collection_language = new LanguageCollection();
var self = this;
var success = function(){
self.render();
};
var lang = this.importLanguages();
$.when( lang).done(success);
},
importLanguages: function(){
var languages = this.collection_language.initData(jQuery.parseJSON($('#json-languages').html()));
this.collection_language.set(languages);
return true;
},
render: function(){
$.each(this.collection_language.models, function( key, value ) {
value.attributes.price = parseFloat(value.attributes.price).toFixed(2);
});
this.collection_language.sortByField('price');
console.log(this.collection_language);
}
});
В моем представлении я попытался разобрать коллекцию и конвертировать цену в float на заказ, но это не решает мою проблему
$.each(this.collection_language.models, function( key, value ) {
value.attributes.price = parseFloat(value.attributes.price).toFixed(2);
});
this.collection_language.sortByField('price');
Найти проблему, это toFixed(2)
внутри функции заказа.
Я изменил это:
$.each(this.collection_language.models, function( key, value ) {
value.attributes.price = parseFloat(value.attributes.price).toFixed(2);
});
к этому:
$.each(this.collection_language.models, function( key, value ) {
value.attributes.price = parseFloat(value.attributes.price);
});
Прекрасно работает
Кажется, что логика сортировки в порядке. Сортировка по другим полям работает так, как ожидалось? Я просто хочу предложить конвертировать цену на этапе инициализации. И лучшим местом для этого является метод parse
модели:
parse : function (data) {
data.price = +data.price;
return data;
}