jQuery插件:插件之间的可变范围问题

时间:2014-05-08 15:13:34

标签: javascript jquery jquery-plugins scope

我是编写jQuery插件的新手,但我决定试一试。起初我对代码的整洁和简洁印象深刻,但现在我遇到了一些可变范围的问题。

下面的一些代码段:

这里我将一些DOM元素缓存为我自己的插件中的变量:

cacheElements : function () {
    this.$highlighter         = $('div#highlighteranalysis');
    ...
    this.$highlighterText    = this.$highlighter.find('div#highlightertext');
},

我定义了一个函数:

createValidSelection : function (highlights) {
    ....
},

通过我的插件,我可以通过这个访问这些变量和函数。这很方便。但我在插件的另一部分依赖一个名为jquery.texthighlighter的插件:

makeSelectable : function () {
    var createValidSelection    = this.createValidSelection,
        showNotes        = this.showNotes;
    this.$highlighterText.textHighlighter({
        onAfterHighlight: function(highlights) {
            createValidSelection(highlights);
            showNotes();
        }
    });
},

我首先将createValidSelection对象声明为常规变量,因为this.createValidSelection现在指向texthighlighter对象,而不是我自己的插件对象。

这很有效,但我觉得有更好的方法。

另外,如果我想要方法createValidSelection(highlight);把任何东西都归还给我的插件,我不知道这是怎么回事。返回将发生在texthighlighter对象上。

我希望有人可以向我解释如何切换范围'。我查看了.extend()和.proxy()方法,但我不确定如何应用它们,或者即使它们与可能的解决方案有任何关联。

谢谢, 亨德里克

PS:如果其中任何一个不清楚,这可能是因为我不知道我在说什么。我不是专业开发人员。请耐心和善良: - )

1 个答案:

答案 0 :(得分:0)

您可以在进入textHighlighter闭包范围之前缓存您的上下文,并从该变量调用您的方法:

makeSelectable : function () {
    var _this = this;

    this.$highlighterText.textHighlighter({
        onAfterHighlight: function(highlights) {
            _this.createValidSelection(highlights);
            _this.showNotes();
        }
    });
},