【问题标题】:When to write a jQuery plugin?何时编写 jQuery 插件?
【发布时间】:2013-06-15 22:38:57
【问题描述】:

这不是一个错字:我问的是何时,而不是如何编写一个 jQuery 插件。 :-)

目前,我为我项目的几乎每个模块编写了一个 jQuery 插件。它工作正常,但听起来不对,因为它实际上与 jQuery 无关,只使用一次。

在我看来,插件必须独立于项目本身或在项目中多次使用。所以,我想知道我的架构是否总体上是错误的,我对即将到来的答案感到兴奋。

我现在的架构,显示在一个简单的博客示例中:

后端

  • BlogController.cls.php - 处理用户操作(例如显示、评论、查找)
  • BlogModel.cls.php - 处理数据操作(例如 getter、setter、保存、删除)

前端

路径:/blog/index/

  • index.htm - HTML 的索引模板
  • index.js - JavaScript

路径:/blog/post/123/

  • post.htm - 文章页面的 HTML
  • post.js - JavaScript

示例目标

我想用一个很酷的消息覆盖每篇博文的日期和时间,例如 “2 小时前添加”,而不是 “MM/DD/YYYY HH:ii "

所以,我为此页面编写了插件 BlogIndex。插件本身使用另一个插件将时间戳转换为字符串。下面是我使用插件 BlogIndex 的方法:

# index.htm
<div id="blog-index">     
    <ul>
        <li>
            <h2>Post Headline</h2>
            <p class="datetime" data-timestamp="1234567890">June, 19th 2013 12:30</p>
        </li>
        <!-- more posts -->
    </ul>
</div>

# index.js
$("#blog-index").BlogIndex({
    liveDateTimePosted: true,       // overwrites "mm/dd/yyyy hh:ii" to "2 hours ago"
    liveDateTimePostedInterval: 500 // refresh every 500 ms
});

对于 post.htm 我会写插件 BlogPost 等等。我希望,我可以解释我在做什么,以及为什么我这样不开心。

你会改变什么?您将如何以 OOP 和模块化的方式组织和编写 JavaScript?我对每个解决方案都持开放态度!

提前致谢!

【问题讨论】:

  • “插件必须独立于项目本身” - 不一定。如果您有一些功能被单个项目重复使用,那么插件仍然有意义。如果它被使用过一次,但您认为它以后可能会在其他地方派上用场,那么插件仍然有意义。如果它只用过一次并且显然在其他地方永远不会有用,那么插件就大材小用了。
  • 众所周知,插件的使用使特定代码/功能可移植和可重用。如果您需要大量重用此代码或需要它可移植,那么为什么不将其编写为插件。在您的情况下,可移植性可能不是一个因素,因为您只是将它用于这个项目,但如果您需要此代码易于重用,那么插件是有意义的。
  • @nnnnnn +1,我更新了我的句子。
  • @MarkWalters:在大多数情况下,这不是关于可重用性,而是关于将所有内容都放在一个模块或“盒子”中,而不是以程序化、混乱的方式写下来。对我来说,在某些情况下,这似乎有点矫枉过正,我希望在我以错误的方式继续之前得到纠正。

标签: javascript jquery oop jquery-plugins architecture


【解决方案1】:

“在我看来,插件必须独立于项目本身或在项目中多次使用。”就是这样,我想你已经回答了你自己的问题。

【讨论】:

  • 你试过 require.js 吗?它基本上允许您加载以 AMD 标准/格式编写的模块。模块可以指定依赖模块等等。另一个好的(但更复杂的)替代方案是wire.js,它也加载AMD模块。我希望这会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2018-01-03
相关资源
最近更新 更多