按字段浮点排序

时间:2013-10-17 16:30:56

标签: jquery backbone.js

我在骨干网上有一个应用程序,我希望在一个浮动字段中对一个集合进行排序,但不是这样做: - 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);
        } 
    });

在我的视图中,我试图解析集合并将浮动价格转换为订单,但它无法解决我的问题

$.each(this.collection_language.models, function( key, value ) {
                    value.attributes.price = parseFloat(value.attributes.price).toFixed(2);
                });

                this.collection_language.sortByField('price');

2 个答案:

答案 0 :(得分:0)

好像排序逻辑似乎没问题。按其他字段排序正在按预期工作? 我只想建议在初始化步骤中转换价格。 最好的地方是模型的parse方法:

parse : function (data) {
  data.price = +data.price;
  return data;
}

答案 1 :(得分:0)

在订单功能中找到问题,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);
});

现在正常工作