extend default,options覆盖所有内容

时间:2014-06-25 15:09:36

标签: javascript jquery plugins jquery-plugins options

在我的插件中,我想提供完整的css控件。但必须声明一些初始值。为了让用户自定义这个初始值,我正在调用$ .extend变量,在该变量中我传递了所有的inilial css。

当我尝试覆盖该对象的一个​​或多个部分时,它将覆盖一切而不仅仅是选择的内容。为什么呢?

我让我有点小提琴http://jsfiddle.net/Hfk79/更清楚:

让我们假装这是我的插件:

$.fn.myPlugin = function( options ) {
    var defaults = $.extend({
        pCSS : {
            color: 'red',
            margin: '1em'
        }
    }, options );

    var settings = $.extend( true, {}, defaults, options );

    return this.click(function() {
        $( this ).css( settings.pCSS );
    });
}

用户现在可以覆盖默认选项。 让我们假装我是一个讨厌红色的用户,只想让它变成蓝色,我对其他属性感觉还可以。我会调用传递此选项的函数:

$( document ).ready(function() {
    $( '.plugin' ).myPlugin({
        pCSS: {
            color: 'blue'
        }
    });
});

然而,这段代码会覆盖一切,而不仅仅是颜色!

我在哪里做错了?

1 个答案:

答案 0 :(得分:2)

删除第一个extend并删除pCSS内部对象有助于:

$.fn.myPlugin = function (options) {
    var defaults = {
        color: 'red',
        margin: '1em'
    };

    var settings = $.extend(true, defaults, options);

    return this.click(function () {
        $(this).css(settings.pCSS);
    });
}

$(document).ready(function () {
    $('.plugin').myPlugin({
        color: 'blue'
    });
});

DEMO