2

对于 twitter bootstrap.js 插件中的模式 代码,我看到了这个:

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

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

为什么要使用jQuery Event 构造函数

以下是源代码中的 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')

    })
  }

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

4

1 回答 1

1

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

多亏了这一点,如果您想在模式打开时做出反应,您只需添加一个事件侦听器:

$("#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 :(");
});
于 2012-08-25T19:38:51.453 回答