我想在RequireJS中使用Noty作为依赖项。问题出在依赖函数中。它依赖于$q和noty。$q是正确的,但是有一个错误: noty不是一个函数。任何人都可以帮助解决这个问题。
app.js
notifier.js
发布于 2015-05-02 01:20:03
我无法重现你的问题。我已经包含了一个工作代码片段,它在底部复制了您的设置。你能把它和你的比较一下,看看我做了什么有意义的事情吗?检查我的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的东西,我认为没有必要将模块包装在生命周期中。你可以这样做:
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>
https://stackoverflow.com/questions/29984906
复制相似问题