2014-09-06 25 views
0

我在下面有一些代碼,它工作得很好。但是我在辯論它是否應該是一個像它的對象或插件。使用js對象或插件

現在它是全局命名空間中的一個對象,它是「壞」的,但是如果我將它作爲插件使用,我不確定要綁定它,因爲它沒有真正的主元素。

它有效,但感覺不對。 我想在對象函數中使用插件或其他東西,我不會使用flashMessage。但可以使用這個。 ?

$(document).ready(function() { 

    flashMessage = { 
     success: function(message, element) { 
      flashMessage.showMessage('success', message, element); 
     }, 
     error: function(message, element) { 
      flashMessage.showMessage('error', message, element); 
     }, 
     showMessage: function(type, message, element) { 
      $('div.alert').remove(); 
      element = element ? element : '.main-content'; 
      var template = flashMessage.getTemplate(type); 
      if(template) { 
       $(element).prepend(template).find('.message').first().text(message); 
      } 
     }, 
     getTemplate: function(type) { 
      return $('#' + type + '-flash-template').html(); 
     } 
    } 
}); 

回答

0

無需插件。

你應該換在一個IIFE(立即調用函數表達式)與revealing module pattern

var flashmessage = function(){ 
    var success=function(message, element){ showMessage('success', message, element); }; 
    var error=function(message, element){ showMessage('error', message, element);}; 
    // you got it, right? 
    return { success:success, error:error /*and the rest*/ } 
}(); 

所以你不污染全局命名空間;只有flashmessage是可見的(就像你的例子)。但是這裏的邏輯封裝在封閉中。它將你的目標進一步提升。

+0

謝謝,這看起來相當不錯。所以你不用這個。你可以調用它自己的函數(showmessage)?因爲它全部包裹在主要功能中? – Wizzard 2014-09-10 21:18:45