我是编写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:如果其中任何一个不清楚,这可能是因为我不知道我在说什么。我不是专业开发人员。请耐心和善良: - )答案 0 :(得分:0)
您可以在进入textHighlighter
闭包范围之前缓存您的上下文,并从该变量调用您的方法:
makeSelectable : function () {
var _this = this;
this.$highlighterText.textHighlighter({
onAfterHighlight: function(highlights) {
_this.createValidSelection(highlights);
_this.showNotes();
}
});
},