1

編集 2012 年 4 月 16 日: タイムゾーンを文字形式に短縮する問題を解決し、サード パーティの並べ替え方法をダウンロードして、目的の結果を得るためにいくつかのことを追加する必要がありました。現在唯一の問題は夏時間のハンドラーですが、それには多くの課題があります。ただし、UTC サマータイム ハンラーの処理方法を知っている人がいる場合は、遠慮なく助けてください。

みんなありがとう。/////////////////////////////////////////////// /////////////////////////////////////////////// /////////////////////////////////////////////// /JSON関数を使用してプライベートサーバーから情報を取得するノックアウトjsを使用して、javscriptビューモデルにバインドしたhtmlテーブルを作成しました。各列をソート可能にしようとしています (列ヘッダーを 1 回クリックして、その列の情報に従ってすべてを降順で取得します。ヘッダーをもう一度クリックしてすべてを昇順で取得し、3 回目ですべてを元の順序で取得します)。

注意してください: 私は自分の問題を検索し、他の解決策を見てきましたが、これまでのところ何もうまくいきませんでした. 私のコードに固有の解決策を見つけたいと思っています。

Javascript ViewModel.js ファイルは基本的に次のようになります。

Event(column1, column2, ...., columnN){
    var self = this;
    self.column1 = column1;
    self.column2 = column2;
    .
    .
}

//Sort column2 that has the Dates (dd (day) HHMM (hours/minutes) mmm (month) yy (year) format)

self.sortColumn = "Column2"
self.sortAscending = true;

self.SortByDates = function(){
    if(self.sortColumn == "Column2")
        self.sortAscending = !self.sortAscending;
    else{
        self.sortColumn = "Column2"
        self.sortAscending = true;
    }
    self.rows.sort(function(a,b){
        if(self.sortAscending == true)
            for(self.Column2 in self.rows)
                return a.Column2 > b.Column2 ? 1 : a.Column2 < b.Column2 ? -1 : 0;
            else
                return a.Column2 < b.Column2 ? 1 : a.Column2 > b.Column2 ? -1 : 0;
    });
}

//specify location of server and info and get them
function getEvents(){
    $.getJSON("http://.........",
        function (data){
            $.each(data.d, function(i, item){
                handleEvent(item)
            })
        }
    );
}
//pushes (AKA populates) info from server into the table
function handleEvent(item){
    var newEvent = new Event(item.Column1InfoFromServer,
                                formatJSONDate(item.Column2DateInfoFromServer), .....)
    this.Model.rows.push(newEvent);
}
//Formats the date info from server into dd (day) HHMM (hours/minutes) mmm (month) yy (year)
formatJSONDate(jsonDate){
    var date = new Date(parseInt(jsonDate.substr(6)));
    return date.format("dd HHMM mmm yy");
}

this.Model = new ViewModel();
this.getEvents();
ko.applyBindings(this.Model);

変換された形式で日付を取得するのに非常に苦労しています(はい、その形式でなければなりません->実際には、「HHMM」の直後にタイムゾーンの略語を含める方法をまだ理解する必要があります'部分はUTCに基づいています)。したがって、テーブル内の他の日付の中に「11 1136 Apr 12」と「22 1624 Jan 12」があるとしましょう。現在、日付に従ってテーブルを並べ替えようとすると、適切に並べ替えられません。どんな助けでも大歓迎です、ありがとう。

編集:明確にするために、タイムゾーンを軍のタイムゾーンコード(タイムゾーン「A」-「Z」)で表示しようとしています。また、サーバーから取得される日付はすでに UTC になっています。

4

2 に答える 2

1

更新

別の質問を見ていたら、誰かがノックアウト グリッド アドオンを作成しました: https://github.com/ericmbarnard/KoGrid

私はこれがあなたを助けるかもしれないに違いない:-)

---懐かしさのための古い答え----

Underscore ライブラリには優れたヘルパー関数がいくつかあり、そのうちの 1 つは sort です。

http://documentcloud.github.com/underscore/#sortBy

sortBy_.sortBy(list, iterator, [context]) 各値を iterator で実行した結果によって昇順にランク付けされた list のソート済みコピーを返します。Iterator は、ソートするプロパティの文字列名 (長さなど) にすることもできます。

_.sortBy([1, 2, 3, 4, 5, 6], function(num){ return Math.sin(num); });
=> [5, 4, 6, 3, 1, 2]

日付のより良いモデルを作成するとともに、これを試してみます。ユーザーのテキスト値とともに、一意の時点であるプロパティを保存する必要があるようです。

于 2012-04-13T18:38:58.833 に答える
0

日付オブジェクトの数値を取得するには、pDate.valueOf() で並べ替えます。これにより、エポックからのミリ秒数が得られます。

ただし、並べ替え関数内に問題がありますが、何をすべきかわかりません。ソート関数内でオブジェクトをウォークして、そのような値を返すことはできません。

于 2012-04-12T20:07:20.793 に答える