2013-02-17 57 views
0

我正在創建我想要用於我的項目的第一個jQuery插件。 但是,我擁有的知識可能不夠。不過,我想繼續創造它......創建jQuery插件 - 設置失敗

所以我有這個部分,我的小插件:

jQuery插件 - 默認設置:

;(function($) { 

var defaults = { 

    title    : 'miniBox - Title Spot!', 
    description   : 'miniBox Description Spot. Write a short article or leave it blank!', 

    buttons: { 
     switcher  : true, 
     nameButton_1 : 'Continue', 
     nameButton_2 : 'Discard', 
    } 
}; 

現在下面我們有此部分:

$.fn.miniBox = function(customs) { 
    var config = $.extend({}, defaults, customs); 
    var $first = this.first(); 

    $first.init = function() { 
     $('body').append(// --> 
      '<div class="miniBox-wrap">' 
     +  '<div class="miniBox-frame">' 
     +   '<div class="miniBox-title"></div>' 
     +   '<div class="miniBox-content">' 
     +    '<div class="miniBox-description"></div>' 
     +    '<div class="miniBox-buttons"></div>' 
     +    '<div class="miniBox-counter"></div>' 
     +   '</div>' 
     +  '</div>' 
     +  '<div class="miniBox-overlay"></div>' 
     + '</div>' // <-- 
     ); 

     var mB_buttonOne = config.buttons.nameButton_1, 
      mB_buttonTwo = config.buttons.nameButton_2, 
      mB_title  = config.title, 
      mB_description = config.description; 

     // --> Confirmation Buttons - Settings OPEN // 
     if(config.buttons.switcher === true) { 
      $('.miniBox-buttons').append(// --> 
       '<input type="button" id="agree" value=' + mB_buttonOne + '>' 
      + '<input type="button" id="disagree" value=' + mB_buttonTwo + '>' 
      // <-- 
      ); 
     } else { 
      $('.miniBox-buttons').remove(); 
     } 
     // <-- Confirmation Buttons - Settings CLOSE // 
     }; 
      $first.init(); 
    }; 

})(jQuery); 

這是混淆了一點點對我來說,是第一次我猜...

問題:

標題導致設置,以便在這裏失敗的另一個問題。

如果我設置了默認標題和描述,然後創建自定義標題或/和描述,那麼我的設置似乎正在工作......它的工作原理將覆蓋默認設置。

但是,如果您可以閱讀簡短的按鈕聲明...如果我的按鈕切換器在默認或習俗中設置爲false或true,它仍然可以工作並覆蓋默認設置......但是,如果默認值和習慣都說: true或false ...按鈕值變成「未定義」。

我沒有線索如何說總是隻讀自定義設置,如果他們被定義,並忘記默認值......或類似的東西。我希望你們瞭解我,希望我能找到答案。

問候,Nenad。

編輯:

看起來像我需要一個按鈕配置完全定義爲海關爲了不得到「未定義」 ......我怎樣才能解決這個問題?默認的

例子:

var defaults = { 
    buttons: { 
     switcher  : false, 
     nameButton_1 : 'Continue', 
     nameButton_2 : 'Discard', 
    } 
}; 

海關的例子:

$(function() { 
$().miniBox({ 
    title: 'Works flawlessly!', 
    buttons: { 
     switcher: true 
    } 
}); 

}); 

我怎麼能仍然使用按鈕名稱默認按鈕設置,如果它們沒有被定義爲自定義設置?

+0

你是什麼意思,你不明白他們?你寫了,對吧? – 2013-02-17 15:18:13

+0

不...我沒有寫變量和那個.init ... 剛剛看到了另一個插件以及$ .extend({}); – user1658136 2013-02-17 15:20:07

回答

1

.first只是一個jQuery方法。它從集合中選擇第一個元素。

init方法是一個定義的函數,然後立即調用它(在這種情況下有點沒有意義),儘管您稍後可以在插件代碼之外調用它(也是毫無意義的)。

至於你的問題的第二部分,你不是遞歸的對象,所以嵌套的對象值沒有得到擴展。使用true作爲.extend的第一個參數,以使其更深:http://jsfiddle.net/ntdLu/1/

+0

感謝.first和.init的解釋...所以我可以擺脫那個init部分? 更新我的問題,請檢查底部...謝謝:) – user1658136 2013-02-17 15:29:43

+1

@ user1658136我會繼續努力,堅持'.init',因爲如果您稍後需要使用更新,它可以使事情變得更簡潔。查看更新的回答 – 2013-02-17 15:35:01

+0

好吧,現在正常工作。所以嵌套的對象值不推薦我假設?此外,我試圖刪除'$()。miniBox();'只是爲了看init是否會觸發,但沒有任何事情發生O_O。謝謝! – user1658136 2013-02-17 15:41:06