我只是浏览了一下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 }
。
我真的很感激任何帮助。
谢谢。
答案 0 :(得分:1)
代码行分解如下:
if (!data)
如果data
变量为null
,undefined
或空字符串,则会出现此情况。
$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
的原因是因为它是对象的键并且您正在显示该值。