繁体   English   中英

为什么函数不接收输入的JSON数据?

[英]Why function does not receive inputted JSON data?

我有一个自定义的jQuery插件,正在处理JSON的一些问题。

我正在使用jQuery插件模板来创建它,并在顶部设置默认属性,如下所示:

// Create the defaults once
var pluginName = "customHighlight",
        defaults = {
            actions: [{"test_action":"Test action"}],
            position: "left"
};

问题是当我尝试在插件初始化时设置自己的属性时,如下所示:

$('div,p').customHighlight({
     actions: [{"1_action":"1 action"}]
});

我什么也没经过。 我是在犯一个我没有在这里发现的男生错误吗?

不清楚“什么都不会发生”是什么意思。 您很可能在实现样板的过程中犯了一个错误,并且没有显示任何相关代码,因此我们无法为您指出这一点,但是设置中存在一个常规设计缺陷。

如果正确使用样板,则插件的settings属性将如下所示:

{
    actions: [{"1_action":"1 action"}],
    position: "left"
}

我假设您期望actions是一个包含两个对象的数组。 结果是因为您正在为actions指定一个值,所以在Plugin.prototype.init中使用的$.extend不使用默认值。

您可以通过更改init这一行来解决此问题:

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

对此:

this.settings = $.extend( true, {}, defaults, options );
                      //  ^ "deep" param

设置为deep表示$.extend应该递归应用。 但这不适用于数组,因此您还需要确保actions是一个对象:

var pluginName = "customHighlight",
        defaults = {
            actions: {"test_action":"Test action"},
            position: "left"
};

现在,这样调用customHighlight

$('div,p').customHighlight({
     actions: {"1_action":"1 action"}
});

将产生一个如下所示的settings对象:

{
    actions: {
       "test_action": "Test action"
       "1_action": "1 action"
    },
    position: "left"
}

小提琴

我意识到设置对象是我需要检索的,而不是我在代码中检索的默认对象。 我在这里没有提供足够的信息,无法对这样的成功答案表示歉意。 但是问题现在已经解决。

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM