Javascript 何时编写jQuery插件?
这不是打字错误:我问何时而不是如何编写jQuery插件。:-) 目前,我为项目的几乎每个模块都编写了jQuery插件。它工作得很好,但听起来是错误的,因为实际上它与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-处
在我看来,插件必须独立于项目本身,或者在项目中使用多次。因此,我想知道我的架构是否总体上是错误的,我对即将到来的答案感到兴奋 我现在的架构,如一个简单的博客示例所示: 后端:
- BlogController.cls.php-处理用户操作(e.q.显示、评论、查找)
- BlogModel.cls.php-处理数据操作(例如getter、setter、save、delete)
- index.htm-HTML的索引模板
- index.js-JavaScript
- 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模块。我希望这是有帮助的。