0

Backbone フレームワークに依存する新しい Alloy 実装で Appcelerator DataGrid を定義しています。水平方向および垂直方向にスクロールする DataGrid の実装に成功しました。これは、REST クエリを介してデータ コレクションを DataGrid にデータバインドし、ユーザーが列ヘッダーに触れたときにグリッドをソートできるようにします。

私が遭遇した1つの問題はこれです。バックボーン モデルの実装を使用してデータ モデルを実装する場合、コンパレータを使用してデータ モデルを昇順に並べ替えます。また、モデルを拡張して、ユーザーが並べ替え基準を定義できるようにしました (フィルターの列定義を渡します)。

これが質問です。グリッドがいつ昇順でソートされるかを知っています。バックボーン モデルで 2 番目のコンパレータを定義して逆順で並べ替えることができるので、ユーザーが降順で並べ替えることができます (基本的に 2 つのコンパレータを作成します)。逆ソートに関する質問を見てきましたが、1 つのモデルで 2 つのコンパレータ オプションを許可することについては何もありません。

Appcelerator について私がフォローしている一般的なモデルは、その例です。

exports.definition = {

config : {
    // table schema and adapter information
},

extendModel: function(Model) {      
    _.extend(Model.prototype, {
        // Extend, override or implement the Backbone.Model methods                     
    });
    return Model;
},

extendCollection: function(Collection) {        
    _.extend(Collection.prototype, {

        // Implement the comparator method.
        comparator : function(book) {
            return book.get('title');
        }

    }); // end extend

    return Collection;
}

}

上記を念頭に置いて、可能であれば、コンパレーターへの2回目のアクセスで、タイトルを本質的に逆に並べ替えたいと思います。

ご指導ありがとうございます。

クリス。

4

1 に答える 1

0

文字列 (大文字と小文字を区別しない) または数値のみを降順で並べ替えるには、次のようにします。

var sort_descending = false; /* assuming you are able to set this variable when you need to sort */
var sort_attribute_name = "title"; /* assuming you can set the attribute name on which you want to sort */
book_list.comparator = function(book){ /* book_list is an instance of book_collection */
  if(sort_descending){
    if(isNaN(book.get(sort_attribute_name)){
       var str = book.get(sort_attribute_name);
       str = str.toLowerCase();
       str = str.split("");
       str = _.map(str, function(letter){
          return String.fromCharCode(-(letter.charCodeAt(0))); /* from an SO answer*/
       });
    }
    return -book.get(sort_attribute_name);
  }
  return book.get(sort_attribute_name);
};
于 2013-06-24T18:05:39.557 に答える