我想将Noty
其用作依赖项RequireJS
。问题出在依赖函数中。它依赖$q
和注意。$q
没关系,但 noty 有错误 - noty 不是函数。任何人都可以帮助解决这个问题。
问问题
324 次
1 回答
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>
于 2015-05-01T17:20:03.377 回答