Я хочу использовать Noty
в качестве зависимости от RequireJS
. Проблема заключается в зависимой функции. Он полагается на $q
и noty. $q
все в порядке, но есть ошибка с noty - noty не является функцией. Может кто-нибудь помочь с этой проблемой.Noty with RequireJS
1
A
ответ
0
Я не могу воспроизвести вашу проблему. Я включил фрагмент рабочего кода, который дублирует вашу настройку внизу. Можете ли вы сравнить его с вашим, чтобы увидеть, сделал ли я что-то существенное по-другому? Проверьте мои версии noty
и q
.
Это поможет, если вы указали точное сообщение об ошибке и номер строки.
Кроме того, в вашем уведомителе определении модуля у вас есть:
define(['noty', '$q'], function (noty, $q) {
var notifier = (function notifier() {
var MESSAGE_TIMEOUT = 3000;
function notifier(){
}
//...
return notifier;
})(noty, $q);
return 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>