1
我想使用Noty
作爲RequireJS
的依賴關係。問題出在依賴函數中。它依靠$q
和noty。 $q
沒問題,但是noty有錯誤 - noty不是函數。任何人都可以幫助解決這個問題。Noty with RequireJS
我想使用Noty
作爲RequireJS
的依賴關係。問題出在依賴函數中。它依靠$q
和noty。 $q
沒問題,但是noty有錯誤 - noty不是函數。任何人都可以幫助解決這個問題。Noty with RequireJS
我無法重現您的問題。我已經包含了一個工作代碼片段,可以在底部複製您的設置。你可以將它與你的比較,看看我是否做了一些重大不同的事情?檢查我的noty
和q
版本。
如果您提供了確切的錯誤消息和行號,這將有所幫助。
此外,在您的通知程序模塊定義你:
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>