0

ユーザー定義の並べ替え関数が IE 8 で機能しません。

オブジェクトはプロパティまたはメソッド 'indexOf' をサポートしていません

roles_store.sort([{
    sorterFn: function(v1, v2) {
    var order = ['read-only', 'user', 'admin', 'super'],
        v1o   = order.indexOf(v1.get('role_name')),
        v2o   = order.indexOf(v2.get('role_name'));           

        return v1o < v2o ? -1 : 1;; 
    }
}]);

次のリンクは、回避策を示しています: Internet Explorer ブラウザーの JavaScript で配列 indexOf() を修正する方法

indexof を Array.prototype.indexOf に置き換えてみました

v2o = order.Array.prototype.indexOf (v2.get('role_name'));

ここで何か見落としがありましたらお詫び申し上げます

4

2 に答える 2

1

IE 8は少し古く、古いjavascriptバージョンが含まれています。私たちが日常的に使用している非常に便利な方法はあまりありません。小さなアレイプロトタイプ拡張ライブラリ(リンク)を含めることをお勧めします。このライブラリを使用すると、すべての新しいブラウザ(新しいjavascriptバージョン)に含まれているすべてのメソッド(配列用)を使用できます。

Evanが提案するようにExtjsメソッドを使用することもできます(それらはうまく機能します)が、常にそれを覚えておく必要があり、インターネットやこのサイトで見つけたスニペットとコードサンプルのほとんどは実行されません( extjsメソッドを使用するようにそれらを変換します)。もう1つの問題は、コードがChromeとFFで正常に機能するが、注意しないとIEでは機能しないことです。

私がお勧めする拡張機能を含める方がはるかに簡単で安全です。これは私たち自身のプロジェクトで行ったことであり、優れたソリューションでした。

于 2012-12-12T22:53:02.533 に答える
1

Ext.Array.indexOf を使用します。可能な場合は、ネイティブの indexOf に従います。

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.Array-method-indexOf

于 2012-12-12T21:37:44.093 に答える