JQueryUI 小部件函数作用域问题

发布于 2024-11-17 16:41:01 字数 868 浏览 2 评论 0 原文

我不确定如何描述这个问题,但我正在使用非常有用的 SlickGrid JQuery 插件制作一个 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);

我的问题是,一旦调用 _filterthis 就会设置为窗口元素,并且不再保存对小部件的引用,因此我的所有选项不可用。我如何知道_filter用户在网格中搜索什么术语?

困难:页面上将出现多个小部件实例,每个实例都有自己单独的过滤器。另外,我不想修改 SlickGrid 的工作方式。

I'm not sure exactly how to describe this problem, but I'm making a JQueryUI widget out of the very useful SlickGrid JQuery plugin. Slickgrid allows for setting a function used as a "filter" to enable searching rows on the client. Like 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(searchString.toLowerCase()) > -1)
                    { return true; }
                }
            }
            return false;
        }


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

My problem is that once _filter gets called, this is set to the window element, and no longer holds a reference to the widget, so all of my options are unavailable. How can I tell _filter what term the user is searching for in the grid?

Difficulty: multiple widget instances will be on the page, each with their own separate filter. Also, I'd prefer not to modify the way SlickGrid works.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

時窥 2024-11-24 16:41:01

不确定这是否是最好的答案,但这就是我想到的:

通过 http://www.robertsosinski.com/2009/04/28/binding-scope-in​​-javascript/ ,在我的创建函数中,我写了

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);

哪个绑定范围到小部件。

Not sure if this is the best answer, but here's what I came up with:

Via the advice on http://www.robertsosinski.com/2009/04/28/binding-scope-in-javascript/ , in my create function, I wrote

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);

Which bound the scope to the widget.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文