2014-09-06 29 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