理解Unslider.js中的链式数据()函数

时间:2015-02-04 08:50:46

标签: javascript jquery unslider

只是在网上点了一个名为Unslider.js的插件,这是一个简单的轻量级carousal插件,我很难理解插件中的以下代码:

me.data(key, instance).data('key', key);

现在让我解释一下这行的上下文,在插件中上面的行前面是以下几行代码:

$.fn.unslider = function(o) {
        var len = this.length;

        //  Enable multiple-slider support
        return this.each(function(index) {
            //  Cache a copy of $(this), so it

            var me = $(this),

                // if len less than 1 , the below line returns "Unslider"
                // Else it returns Unslider-1 , Unslider-2 and so on .. 
                key = 'unslider' + (len > 1 ? '-' + ++index : '');      

                instance = (new Unslider).init(me, o);

我进行了一些测试,发现了下面的一行,

key = 'unslider' + (len > 1 ? '-' + ++index : '');      

表示,如果len"小于"则键返回' slider'如果超过1,则结果看起来像' slider-1',' slider-2' ,' slider-3'等等 。

下一行是:

instance = (new Unslider).init(me, o);

正在创建一个新的Unslider实例并将其存储在实例中,之后。

init(me,o)函数执行where,

me = $(this)和o只不过是用户传递给插件的对象文字。

现在我给出了上述所有解释,以便一切都不会脱离背景。

现在我确实去了Jquery官方文档并检查了data()的用法。

我看到了例如:

  $( "body" ).data( "foo", 52 );
    $( "body" ).data( "bar", { myType: "test", count: 40 } );
    $( "body" ).data( { baz: [ 1, 2, 3 ] } );
    $( "body" ).data( "foo" ); // 52
    $( "body" ).data(); // { foo: 52, bar: { myType: "test", count: 40 }, baz: [ 1, 2, 3 ] }

这些例子说实话很可爱,但不知怎的,他们不能帮助我理解我想要的东西。

回到我的问题,

me.data(key, instance).data('key', key);

以上行真的正在做什么

编辑::

如果我脱掉那条线似乎工作得很好,插件仍然可以正常工作,而且仍然可以滑动。

谢谢你。

亚历山大。

1 个答案:

答案 0 :(得分:1)

当jQuery的data与两个参数,一个键和一个值一起使用时,它会将给定键下的值存储在jQuery跟踪的内部对象中。

执行此操作时,jQuery将返回集合,因此可以再次链接

var me  = $('#element'); // a DOM element

var me2 = me.data('key1', 'value'); // returns same DOM element

me2.data('key2', 'value');

相同
var me  = $('#element'); // a DOM element

me.data('key1', 'value').data('key2', 'value');

因为收集了该集合,并且可以链接。

至于存储在data中的数据,这是插件内部使用的内容,可以是任何内容,甚至是对象,只要有一个关键来获取数据再一次,记住这不是HTML中的数据属性,它是一个接受任何数据类型的内部存储,甚至是函数的实例。

至于密钥,它只是增加为唯一

key = 'unslider' + (len > 1 ? '-' + ++index : ''); // the string "unslider-1" etc

然后第一次调用data存储滑块的当前实例

me.data(key, instance).data('key', key);

而第二个存储密钥,因为它更容易做到

me.data('key');

要取回钥匙,如果你不知道钥匙的最后一个号码是什么,那么它实际上有点聪明,因为它可以让你做到

var key = me.data('key');
var instance = me.data(key);

并且无论索引,增量等如何,都会获得正确的intance。