2012-02-23 2 views
-1

У меня есть странная проблема с плагином jquery и настройками, написанными выше.Параметры плагина jquery не распространяются правильно и перезаписываются

  1. Если я настрою плагин, как это, это works fine.

    $("#social-media").socialMedia({ 
        url: "http://css-tricks.com", 
        social: [ 
         { name: "facebook", widget: "like_small" }, 
         { name: "twitter", widget: "small" }, 
         { name: "googlePlus", widget: "small" } 
        ]  
    }); 
    
  2. Если добавить дополнительный параметр, который мне нужно переписать, то facebook like button does not load.

    $("#social-media").socialMedia({ 
        url: "http://css-tricks.com", 
        social: [ 
         { name: "facebook", widget: "like_small" }, 
         { name: "twitter", widget: "small" }, 
         { name: "googlePlus", widget: "small" } 
        ], 
        facebook: { 
         id: 195838043798363 
        }  
    }); 
    

ответ

4

По умолчанию jQuery.extend() заменяет целые свойства. Таким образом, если по умолчанию есть это:

{ 
    … 
    facebook: { 
     like_large: '<div class="fb-like" data-href="{url}" data-send="false" data-layout="box_count" data-width="120" data-show-faces="false"></div>', 
     like_small: '<div class="fb-like" data-href="{url}" data-send="false" data-layout="button_count" data-width="120" data-height="21" data-show-faces="false" data-colorscheme="light"></div>', 
     share: '<a name="fb_share" type="box_count" share_url="{url}" href="http://www.facebook.com/sharer.php?u={url}&t={title}">Share</a>', 
     id: 195838043798363 
    }, 
    … 
} 

И ваши варианты выглядеть следующим образом:

{ 
    … 
    facebook: { 
     id: 195838043798363 
    }  
    … 
} 

facebook Весь объект будет заменен { id: 195838043798363 }.

Оказалось, что jQuery.extend() поддерживает выполнение того, что вы пытаетесь сделать, если вы передадите true в качестве своего первого аргумента. Изменение этой строки:

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

к этому:

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

Если сделать это делать то, что вы хотите, чтобы это сделать.

+0

Это правильный ответ. Игнорируйте мою. – Jivings

+0

Вот jsfiddle, чтобы доказать этот ответ: http://jsfiddle.net/UwvDM/4/ – Jivings

+0

@ Jivings Спасибо за jsfiddle! На самом деле, мне нравится, когда ты лучше отвечаешь. Хотя мой - это легкое исправление, ваш дизайн плагина лучше. – s4y

1

С этим назначением вы перезаписью всего facebook объекта в плагине, так что она состоит только из переменной id.

Вы лучше от делая facebook ID отдельного свойства перезаписать:

... 
facebook: { 
    like_large: '<div class="fb-like" data-href="{url}" data-send="false" data-layout="box_count" data-width="120" data-show-faces="false"></div>', 
    like_small: '<div class="fb-like" data-href="{url}" data-send="false" data-layout="button_count" data-width="120" data-height="21" data-show-faces="false" data-colorscheme="light"></div>', 
    share: '<a name="fb_share" type="box_count" share_url="{url}" href="http://www.facebook.com/sharer.php?u={url}&t={title}">Share</a>',     
}, 
facebook-id: 1000000, 
... 

http://jsfiddle.net/UwvDM/3/

Смежные вопросы