prototype.js Element.addMethods

时间:2012-11-02 17:39:01

标签: jquery plugins prototypejs

在基本了解如何构建jQuery插件之后,我一直在寻求将其转换为Prototype。

我找到this presentation here并在插件/扩展程序幻灯片上显示:

jQuery 中的

jQuery.fn.myPlugin = function(args) {return: this;};

原型

中的

Element.addMethods({
  myPlugin: function(element) { 
  return element;
  }
});

我设法将我的简单插件转换为Prototype,但现在我想知道这是否实际上是正确编写它的方式,或者是否应该实际使用类。我对OOP中的类知之甚少,但关于Element.addMethods的谷歌搜索也没有太多亮点。

非常感谢!

1 个答案:

答案 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();

所有功能都需要在一个方法中,这似乎不如创建一个类灵活。它也感觉有点奇怪和错误。

希望这会有所帮助。如果您有任何问题,请告诉我。