2015-05-01 51 views
1

我想使用Noty作爲RequireJS的依賴關係。問題出在依賴函數中。它依靠$q和noty。 $q沒問題,但是noty有錯誤 - noty不是函數。任何人都可以幫助解決這個問題。Noty with RequireJS

app.js

notifier.js

回答

0

我無法重現您的問題。我已經包含了一個工作代碼片段,可以在底部複製您的設置。你可以將它與你的比較,看看我是否做了一些重大不同的事情?檢查我的notyq版本。

如果您提供了確切的錯誤消息和行號,這將有所幫助。

此外,在您的通知程序模塊定義你:

define(['noty', '$q'], function (noty, $q) { 
    var notifier = (function notifier() { 
     var MESSAGE_TIMEOUT = 3000; 

     function notifier(){ 
     } 
     //... 
     return notifier; 
    })(noty, $q); 

    return notifier; 
}); 

這就是做這件事的真正令人困惑的方式。您有三件名爲notifier的東西,我不認爲需要將模塊封裝在IIFE中。你可能只是有:

define(['noty', '$q'], function (noty, $q) { 
    var MESSAGE_TIMEOUT = 3000; 

    function notifier(){} 
    //... 
    return notifier; 
}); 

而這裏的工作片斷:

require.config({ 
 
    paths: { 
 
    "jquery": "http://code.jquery.com/jquery-2.1.1.min", 
 
    "noty": "https://rawgit.com/needim/noty/v2.3.5/js/noty/packaged/jquery.noty.packaged.min", 
 
    "$q": "https://rawgit.com/kriskowal/q/v1.3.0/q" 
 
     //"notifier": "/content/js/notifier" // note, defined as a named module below 
 
    } 
 
}); 
 

 

 
define('notifier', ['noty', '$q'], function(noty, $q) { 
 
    var notifier = (function notifier() { 
 
    var MESSAGE_TIMEOUT = 3000; 
 

 
    function notifier() {} 
 

 
    notifier.prototype.showErrorMessage = function(msg) { 
 
     var deferred = $q.defer(); 
 

 
     noty({ 
 
     text: msg, 
 
     type: 'error', 
 
     layout: 'topCenter', 
 
     timeout: MESSAGE_TIMEOUT 
 
     }); 
 

 
     setTimeout(function() { 
 
     deferred.resolve(); 
 
     }, MESSAGE_TIMEOUT); 
 

 
     return deferred.promise; 
 
    }; 
 

 
    notifier.prototype.showSuccessMessage = function(msg) { 
 
     var deferred = $q.defer(); 
 

 
     noty({ 
 
     text: msg, 
 
     type: 'success', 
 
     layout: 'topCenter', 
 
     timeout: MESSAGE_TIMEOUT 
 
     }); 
 

 
     setTimeout(function() { 
 
     deferred.resolve(); 
 
     }, MESSAGE_TIMEOUT); 
 

 
     return deferred.promise; 
 
    }; 
 

 
    notifier.prototype.showConfirmMessage = function(confirmMessage) { 
 
     var deferred = $q.defer(); 
 

 
     noty({ 
 
     text: confirmMessage, 
 
     type: 'confirm', 
 
     layout: 'topCenter', 
 
     buttons: [{ 
 
      text: "Yes", 
 
      onClick: function($noty) { 
 
      deferred.resolve(); 
 
      $noty.close(); 
 
      } 
 
     }, { 
 
      text: "Cancel", 
 
      onClick: function($noty) { 
 
      deferred.reject(); 
 
      $noty.close(); 
 
      } 
 
     }] 
 
     }); 
 

 
     return deferred.promise; 
 
    }; 
 

 
    return notifier; 
 
    })(noty, $q); 
 

 
    return notifier; 
 
}); 
 

 
requirejs(["jquery", "noty", "$q", "notifier"], 
 
    function($, noty, $q, notifier) { 
 
    $("#btn").click(function() { 
 
     var n = new notifier(); 
 
     n.showSuccessMessage('Success'); 
 
    }); 
 
    });
<script src="http://requirejs.org/docs/release/2.1.17/minified/require.js"></script> 
 
<button id="btn">btn</button>