【问题标题】:Using jQuery binds for "everything"?使用 jQuery 绑定“一切”?
【发布时间】:2011-06-06 14:11:36
【问题描述】:

我已经爱上了 jQuery 绑定。原因是它使我可以轻松访问事件 - 以及使功能可访问的统一方式。以下是示例:

$menu = $('<span id="menuid"></span>');

$menu.bind('populate', function() {
    // put stuff in the menu
}

$menu.trigger('populate');

和这个完全一样:

$menu = $('<span id="menuid"></span>');

var _populateMenu = function() {
    // put stuff in the menu
}

_populateMenu();

但是我可以将所有绑定串在一起,并且 - 如前所述 - 对“填充”、“放置”、“隐藏”、“显示”等执行相同操作。我编写了相当大的 jQuery 插件,但什么也没有但绑定 - 并分析它的速度和呼叫。与“正常”方式相比,bind 方法使用的时间和调用稍多。

这样做的另一个好处是我可以轻松地从任何地方触发东西。喜欢 这个:

$("#" + menuid).trigger('placement');

如果我想访问 jQuery 插件中的函数,我需要将其分配给一个变量来执行此操作。

那么 - 这样做真的有什么办法吗?或者我应该将函数保留为函数,并且只绑定实际事件(如显示、隐藏、keyup 等)?我只是觉得这个东西非常强大。但我担心它的代价是我没有看到的。

【问题讨论】:

  • 能够“从任何地方触发东西”并不是一件好事。这将变成一场调试噩梦。
  • 听起来你爱上了 OOP,而不仅仅是 jquery。您的问题更语义化,还是您在问功能限制?
  • @meagar 我的经验是,如果仔细管理,它不会有任何特别讨厌的架构问题,事实上,通过将一些管理委派给经过充分测试的 jQuery 内部,它实际上 减少出现错误的机会。
  • @Mikhail 我想知道这个功能,真的。如果这样做有任何强烈的限制。这很方便。能够这样写:$menu.trigger('populate').trigger('position').trigger('show'); 真的很有趣也很容易。我通过很好地控制我的 console.log 消息解决了调试问题。老实说,我在调试方面没有任何问题。

标签: javascript jquery jquery-plugins jquery-events


【解决方案1】:

这样做的好处是它可以解耦独立的代码块,并且可以在代码甚至不必知道特定页面上是否存在此类行为的情况下触发行为。

正如您所说,这是有代价的,但根据您的应用程序,这可能是值得的。如果代码需要在每个“按键”事件中调用数千次功能,那么这可能是个坏主意。但是在现代浏览器中,一打或两个函数调用与事件触发器确实不会增加太多时间。

我还要说,当所讨论的功能与 DOM 无关时,使用 jQuery 事件系统将是一种相当奇怪的反模式,我会避免这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2012-12-11
    相关资源
    最近更新 更多