我尝试在控制器函数中实现同步的多个查找查询。 Jquery.js放在gruntfile中的** / *之前。我使用Sails v0.9.4。 第一个错误:
"$ is not defined"
发生在这里:
var dfd = $.Deferred();
我是JS的新手,对Sails来说相对较新,我对这个问题的长期研究绝对没有成功。
提前致谢, 马丁
PS: gruntfile摘录:
var jsFilesToInject = [
'linker/js/socket.io.js',
'linker/js/sails.io.js',
'linker/js/app.js',
'linker/js/jquery.js',
'linker/js/jquery.validate.min.js',
'linker/**/*.js'
];
控制器摘录:
var dfds = [];
var seriesLists = [];
function checkForWord(word,place) {
var dfd = $.Deferred();
Series.find({seriesname:{'contains':'word'}}, function (err,sers) {
seriesLists[place] = sers;
dfd.resolve();
});
return dfd.promise();
}
for(var k=0;k<words.length;k++) {
dfds.push(checkForWord(words[k],k));
}
$.when.apply($, dfds).then(function() {
console.log("seriesLists:",seriesLists);
});
}
答案 0 :(得分:2)
你应该考虑到:
这就是控制器无法看到jquery库的原因。如果你想在服务器端有jquery(我觉得有点奇怪)你应该用npm包含它:
npm install jquery
或更合适:
npm install node-query
无论如何,如果你正在寻找的是promises支持,那么你可以使用q(这是最常用的promises库之一,无论是客户端还是服务器端)。在服务器端,您可以像这样安装q:
npm install q
(除非我完全错了,你正在做一个“客户端”控制器:)。
答案 1 :(得分:0)
检查头部上包含jquery的顺序。
确保在您的网页上和此行之前包含一次
var dfd = $.Deferred();
答案 2 :(得分:0)
在sails版本0.11 jquery加载后引导,为了把jquery放在第一个并且没有出现错误,我的应用程序必须加载jquery才能正确运行引导程序
你必须在你的sails'task / pipeline.js'上找到这条路径,并在jsfilesToInject = [-here-]之间将'js / dependencies / jquery-version of jquery-.js'放在'js之间/dependencies/sails.io.js'和'js / dependencies / ** / * .js'如下:
// Client-side javascript files to inject in order
// (uses Grunt-style wildcard/glob/splat expressions)
var jsFilesToInject = [
// Load sails.io before everything else
'js/dependencies/sails.io.js',
//For make your jquery load first
'js/dependencies/jquery-2.1.1.js',
// Dependencies like jQuery, or Angular are brought in here
'js/dependencies/**/*.js',
// All of the rest of your client-side js files
// will be injected here in no particular order.
'js/**/*.js'
];
例如,这是一个错误的配置:
var jsFilesToInject = [
'linker/js/socket.io.js',
'linker/js/sails.io.js',
'linker/js/app.js',
'linker/js/jquery.js',
'linker/js/jquery.validate.min.js',
'linker/**/*.js'
];
因为jquery会比app.js后加载,如果在你的应用程序中,你将使用jquery函数会出现错误