1

この問題を正確に説明する方法はわかりませんが、非常に便利なSlickGridJQueryプラグインからJQueryUIウィジェットを作成しています。Slickgridでは、「フィルター」として使用される関数を設定して、クライアントで行を検索できるようにすることができます。このような...

_filter: function (item) {
            if (this.options.searchString == null)
            { return true; }
            if (this.options.searchString.length == 0)
            { return true; }
            for (var prop in item) {
                if (item[prop] != null) {
                    if (item[prop].toString().toLowerCase().indexOf(searchString.toLowerCase()) > -1)
                    { return true; }
                }
            }
            return false;
        }


self.options.dataView.setFilter(self._filter);

私の問題は、一度_filter呼び出されるとthis、window要素に設定され、ウィジェットへの参照を保持しなくなるため、すべてのオプションが使用できなくなることです。_filterユーザーがグリッドで検索している用語を確認するにはどうすればよいですか?

難易度:複数のウィジェットインスタンスがページに表示され、それぞれに独自のフィルターがあります。また、SlickGridの動作方法を変更したくありません。

4

1 に答える 1

0

これが最良の答えかどうかはわかりませんが、私が思いついたのは次のとおりです。

http://www.robertsosinski.com/2009/04/28/binding-scope-in ​​-javascript/ のアドバイスを介して、私の create 関数で、私は書きました

this._filter = function (item) {

                if (this.options.searchString == null)
                { return true; }
                if (this.options.searchString.length == 0)
                { return true; }
                for (var prop in item) {
                    if (item[prop] != null) {
                        if (item[prop].toString().toLowerCase().indexOf(this.options.searchString.toLowerCase()) > -1)
                        { return true; }
                    }
                }
                return false;
            } .bind(this);

スコープをウィジェットにバインドします。

于 2011-06-28T18:13:52.553 に答える