创建特定于单个页面的jQuery插件是否合适?我一直在创建不依赖于任何上下文并且不包含业务逻辑的通用插件,但我曾经谈过的一些人建议几乎所有的javascript,包括特定于单个页面的业务逻辑和逻辑,都应该在jQuery中插件。
是否适合使用验证特定HTML表单的validateformXYZ插件?
我正在购买jQuery 100%,但我不确定这是否是误用。
答案 0 :(得分:3)
我倾向于使用不同的方法。当我有对象(通常是表单)需要绑定很多客户端行为时,我定义了表示这些表单的JavaScript对象。
例如,联系表单可能具有相应的Contact对象,该对象使用内部表单元素(文本框,按钮等)的上下文进行初始化。在初始化期间,您可以使用jQuery(或者你选择的框架)为这些元素添加行为。在您的情况下,您将绑定一个click事件,该事件将调用Contact对象中的验证函数。
这似乎比创建一大堆不相关的插件更清晰,以提供非常具体的行为。
编辑提供示例
这是一个快速的&这个实际操作的简单示例:http://jsbin.com/elefi/edit
代码:
if(typeof(MyDomain) == "undefined") {
MyDomain = {};
MyDomain.MyApp = {};
}
MyDomain.MyApp.ContactForm = function() {
var $_submitButton;
var $_firstNameTextBox;
var _validateForm = function () {
if($_firstNameTextBox.val() === '') {
alert('Form Invalid');
}
else {
alert('Form Valid');
}
};
return {
initialize: function(submitButtonId, firstNameTextBoxId) {
// Add context
$_submitButton = $("#" + submitButtonId);
$_firstNameTextBox = $("#" + firstNameTextBoxId)
// Add behaviours
$_submitButton.click(_validateForm);
}
}
}();
// Emit this using your server-side code
$(function() {
MyDomain.MyApp.ContactForm.initialize('SubmitButton', 'FirstName');
});
请注意,IE6似乎不喜欢jsbin.com,所以在FF中打开它
答案 1 :(得分:0)
说实话,这取决于实施,只要它完成工作,恕我直言就坚持DRY principle。
事情是某个插件甚至可能意味着要编写更多代码以使方法成为插件。
答案 2 :(得分:-1)
即使您没有使用正式的多层架构,Web脚本本质上也是多层的。在这种情况下,JavaScript在View(或UI)上运行,不应该执行复杂的业务逻辑。
除了UI操作和从下一个应用程序层发送/接收数据之外,由于Web应用程序的分离方式,JavaScript应该进行一些基本的验证。此验证应在其他一个层中重复,因为可以禁用JavaScript。
通过基本验证,我的意思是,如果填写了值,是否是正确的类型等...除非明确地将其置于UI的控制之下,否则不应验证最小值/最大值...否则您将面临获取的风险事情与其他层次不同步。