复杂数据()与HTML元素的附件

时间:2015-03-08 13:28:49

标签: javascript jquery twitter-bootstrap

我只是浏览了一下modal.js中的代码,我遇到了以下行,我遇到了困难,下面是行,我遇到了困难:

if (!data) $this.data('bs.modal', (data = new Modal(this, options)))

你也可以在github上找到这一行:line 289

现在,显然,上面的行是将data()附加到HTML元素,我的问题是我发现很难想象它是如何做到的:

具体来说我的问题是传递给data()方法的第一个参数,现在Jquery文档清楚地说第一个参数是key而第二个参数是{{1} ,如果下面的行执行:

value

HTML元素的构建数据是什么样的?

if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
像上面这样的东西?我真的很困惑最终结果会是什么样的,有人能真正澄清一下,使用bs.modal : { this.options = options this.$body = $(document.body) this.$element = $(element) this.$dialog = this.$element.find('.modal-dialog') this.$backdrop = null this.isShown = null this.originalBodyPad = null this.scrollbarWidth = 0 this.ignoreBackdropClick = false } 作为第一个参数吗?

我这样做是为了检查最终产品的样子:

bs.modal

我得到以下结果:

  1    console.log($this.data('bs.modal'));
  2    if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
  3    console.log($this.data('bs.modal')); 

但我在任何地方都看不到line:1 undefined line:3 Object { options: Object, $body: Object, $element: Object, isShown: null, $backdrop: null, scrollbarWidth: 0 }

我真的很感激任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

代码行分解如下:

if (!data)

如果data变量为nullundefined或空字符串,则会出现此情况。

$this.data('bs.modal', ...)

这是jQuerys data()方法的setter。

data = new Modal(this, options)

这是将data变量设置为等于新的Modal对象。因为它位于data()变量的setter中,所以它也设置了bs.modal数据值。它相当于这段代码:

var x = a = 'foo';
console.log(x); // = 'foo'
console.log(a); // = 'foo'

您在最后一个示例的控制台输出中看不到bs.modal的原因是因为它是对象的键并且您正在显示该值。