【问题标题】:How to use jQuery in a Sails controller. ("$ is not defined")如何在 Sails 控制器中使用 jQuery。 ("$ 未定义")
【发布时间】:2015-06-20 05:24:01
【问题描述】:

我尝试在控制器函数中实现同步的多个查找查询。 jquery.js 放在 gruntfile 中的 **/* 之前。我使用 Sails v0.9.4。 第一个错误:

"$ is not defined"

在这里发生:

var dfd = $.Deferred();

我是 JS 新手,对 Sails 还比较陌生,我对这个问题的长期研究绝对没有成功。

提前致谢, 马丁

PS: grunt 文件摘录:

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);
});

}

【问题讨论】:

  • 我的体能将在明天晚上 7:15 恢复(或者他们告诉我的),但现在请假设我们可能想查看您的 gruntfile 或其他详细信息 :)
  • 如果您需要任何信息,请告诉我。

标签: jquery controller sails.js


【解决方案1】:

您应该考虑到:

  1. 控制器位于sailsjs 端,这意味着:位于服务器(nodejs)端。
  2. grunt 文件将 jquery 库注入到将在客户端(浏览器)端解释的 html。

这就是控制器无法看到 jquery 库的原因。如果您想在服务器端使用 jquery(我觉得这有点奇怪),您应该将它包含在 npm 中:

npm install jquery

或更合适的:

npm install node-query

无论如何,如果您正在寻找的是承诺支持,那么您可以使用 q(这是最常用的承诺库之一,无论是用于客户端还是服务器端)。在服务器端,你可以像这样安装 q:

npm install q

(当然,除非我完全错了,而你正在做一个“客户端”控制器:)。

【讨论】:

  • 非常感谢迭戈!我的名声太小,无法评价您非常有帮助的评论。所以我现在把它作为评论。 :) 不,你是对的,我尝试同步一些查询结果。我现在尝试了sails 中已经包含的async.js 函数。但我会看看q。非常感谢。
  • 不客气。不用担心评分。我很高兴它对你有所帮助。我不确定,但也许您可以将其标记为“已接受”(评级数字下方的“粗”),以便其他人可以将其识别为您问题的真实答案。
【解决方案2】:

检查您在头部包含 jquery 的顺序。

确保它在您的页面上和此行之前被包含一次

var dfd = $.Deferred();

【讨论】:

    【解决方案3】:

    在引导后加载 0.11 版 jquery 时,为了将 jquery 放在首位并且不会出现错误,我的应用必须在引导之前加载 jquery 才能正常工作

    你必须在你的风帆“tasks/pipeline.js”上找到这条路径,并将这个“js/dependencies/jquery-version of your jquery-.js”放在 var jsFilesToInject = [-here-] 之间/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加载之后,如果在你的app中,你使用jquery函数会出现错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      相关资源
      最近更新 更多