2013-02-17 82 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