在基本了解如何构建jQuery插件之后,我一直在寻求将其转换为Prototype。
我找到this presentation here并在插件/扩展程序幻灯片上显示:
jQuery 中的:
jQuery.fn.myPlugin = function(args) {return: this;};
Element.addMethods({
myPlugin: function(element) {
return element;
}
});
我设法将我的简单插件转换为Prototype,但现在我想知道这是否实际上是正确编写它的方式,或者是否应该实际使用类。我对OOP中的类知之甚少,但关于Element.addMethods的谷歌搜索也没有太多亮点。
非常感谢!
答案 0 :(得分:2)
迟到的回复,但根据你的意见,我肯定会为此创建一个类。
当您想要执行与元素实例相关的功能时,扩展元素非常有用。通常,至少与Prototype提供的那些相比,它们具有更多的实用性:更改属性值,从dom添加/删除等。
我无法想象一个可以包含手风琴所需逻辑的元素方法。您提到过您希望能够在同一页面上拥有多个手风琴 - 这不需要它是一个元素方法。 You can define an accordion class,然后为你想要使用它的每个地点实例化它。
假设您的手风琴课要求您拥有一个容器div,并且所有打开/关闭标签(或者您想要定义它们)都是直接后代。你的标记看起来像这样:
<div id="accordion1">
<div class="slide"><!-- content --></div>
<div class="slide"><!-- content --></div>
<div class="slide"><!-- content --></div>
</div>
你设置了你的课程:
var MyAccordion = Class.create({
initialize: function(containingElement) {
var slides = $(containingElement).select('.slide');
... do all your other stuff, hook up event handlers to open/close, etc
}
});
并像这样实例化:
new MyAccordion($('accordion1'));
这肯定会让你拥有多个实例。这就是使用类的重点。
如果您要扩展Element以添加方法,则必须执行以下操作来实例化:
$('accordion1').accordion();
所有功能都需要在一个方法中,这似乎不如创建一个类灵活。它也感觉有点奇怪和错误。
希望这会有所帮助。如果您有任何问题,请告诉我。