2015-12-21 78 views
0

我有一个自定义的jQuery插件,我正在处理一些与JSON有关的问题。为什么函数没有收到输入的JSON数据?

我使用jQuery plugin boilerplate创建此,在顶部像我设置默认属性,以便:

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

的问题是,当我尝试设置的插件一样开始我自己的属性所以:

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

我没有得到任何通过。我是否犯了一个学校男孩的错误,我没有抓到这里?

+1

你需要的地方包括:结合什么已经通过与默认,也许如何你确定你已经通过了代码。 –

+0

那里没有JSON。 'actions'是一个数组。 – Quentin

回答

0

你不完全清楚你的意思是“什么都没有通过”。您在完成样板文件时犯了错误,而且您没有显示任何相关代码,因此我们无法为您指出这一点,但是您的设置中存在一个通用设计缺陷。

如果你使用正确的样板,你的插件的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" 
} 

Fiddle

+0

感谢您花时间回答这个问题。幸运的是,我意识到我的错误只是不知道jQuery样板文件真正起作用!我在下面输入了我的答案/思考过程。 – Tapha

+0

@Tapha:很高兴你的问题解决了。你可能还想指出'action'数组将被覆盖并且不会附加到,除非你手动干预来改变它。 –

0

我意识到设置对象是我需要检索的,而不是我在代码中检索的默认对象。在这里我没有提供足够的信息来获得成功的答案,所以我们很抱歉。但问题现在已经解决。

干杯

相关问题