为什么twitter bootstrap.js在jQuery插件中使用$ .Event对象?

时间:2012-04-25 09:33:25

标签: jquery events twitter-bootstrap

对于twitter bootstrap.js插件中的modal code,我看到了这一点:

e = $.Event('show')
this.$element.trigger(e)

他们为什么不这样做$.element.show()

为什么要使用jQuery Event constructor

以下是来源的show方法:

show: function () {
   var that = this
      , e = $.Event('show')

    this.$element.trigger(e)

    if (this.isShown || e.isDefaultPrevented()) return

    $('body').addClass('modal-open')

    this.isShown = true

    escape.call(this)
    backdrop.call(this, function () {
      var transition = $.support.transition && that.$element.hasClass('fade')

      if (!that.$element.parent().length) {
        that.$element.appendTo(document.body) //don't move modals dom position
      }

      that.$element.show()

      if (transition) {
         that.$element[0].offsetWidth // force reflow
      }

      that.$element.addClass('in')

      transition ?
        that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
        that.$element.trigger('shown')

    })
  }

有人可以清楚地向我解释这个吗?

1 个答案:

答案 0 :(得分:1)

那是因为它让我们有机会对这一事件做出反应。

多亏了这个,如果你想在modal打开时做出反应你只应该添加一个事件监听器:

$("#myModal").on("show", function () {
    console.log("Do stuff on 'show'");
});

要清楚。他们创建了一个名为“show”的事件,但可以是任何名称,因为它仅用于该插件。即使他们打电话给“showme-the-money”,你也只能听那个事件:

$("#myModal").on("showme-the-money", function () {
    console.log("Sorry i'm poor :(");
});