Javascript 何时编写jQuery插件?

Javascript 何时编写jQuery插件?,javascript,jquery,oop,jquery-plugins,architecture,Javascript,Jquery,Oop,Jquery Plugins,Architecture,这不是打字错误:我问何时而不是如何编写jQuery插件。:-) 目前,我为项目的几乎每个模块都编写了jQuery插件。它工作得很好,但听起来是错误的,因为实际上它与jQuery无关,只使用了一次 在我看来,插件必须独立于项目本身,或者在项目中使用多次。因此,我想知道我的架构是否总体上是错误的,我对即将到来的答案感到兴奋 我现在的架构,如一个简单的博客示例所示: 后端: BlogController.cls.php-处理用户操作(e.q.显示、评论、查找) BlogModel.cls.php-处

这不是打字错误:我问何时而不是如何编写jQuery插件。:-)

目前,我为项目的几乎每个模块都编写了jQuery插件。它工作得很好,但听起来是错误的,因为实际上它与jQuery无关,只使用了一次


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

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

后端

  • BlogController.cls.php-处理用户操作(e.q.显示、评论、查找)
  • BlogModel.cls.php-处理数据操作(例如getter、setter、save、delete)
前端

路径:/blog/索引/

  • 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
});
#index.htm
  • 帖子标题

    2013年6月19日12:30

#index.js $(“#博客索引”).BlogIndex({ liveDateTimePosted:true,//将“mm/dd/yyyy hh:ii”改写为“2小时前” liveDateTimePostedInterval:500//每500毫秒刷新一次 });
对于post.htm,我将编写插件BlogPost等等。我希望,我能解释我在做什么,为什么我这样不开心

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


提前谢谢

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

“插件必须独立于项目本身”——不一定。如果某个项目重复使用某个功能,那么插件仍然是有意义的。如果它只使用过一次,但你认为它以后可能会在其他地方派上用场,那么一个插件仍然是有意义的。如果它只使用一次,而且显然在其他地方永远不会有用,那么插件就太过分了。所有人都认为,使用插件会使特定的代码/功能变得可移植和可重用。如果您需要大量重复使用此代码,或者需要它具有可移植性,那么为什么不将其作为插件编写呢。在您的情况下,可移植性可能不是一个因素,因为您只是将其用于此项目,但如果您需要此代码易于重用,则插件是有意义的。@nnnnnn+1,我更新了我的句子。@MarkWalters:在大多数情况下,这不是关于可重用性,而是关于将所有内容都放在模块或“框”中,而不是写在过程中,混乱的方式。对我来说,在某些情况下,这似乎是矫枉过正,我希望在以错误的方式继续之前得到纠正。您是否尝试过require.js?它基本上允许您加载以AMD标准/格式编写的模块。模块可以指定依赖模块等等。另一个好的(但更复杂的)选择是wire.js,它也加载AMD模块。我希望这是有帮助的。