Question

J'essaie d'implémenter plusieurs requêtes de recherche multiples synchronisées dans une fonction de contrôleur. Jquery.js est placé avant ** / * dans le grognile.J'utilise des voiles V0.9.4. Première erreur:

"$ is not defined"

se produit ici:

var dfd = $.Deferred();

Je suis nouveau chez JS et relativement nouveau aux voiles et ma belle longue recherche pour cette question était absolument sans succès.

Merci d'avance, Martin

PS: Gruntfile Extraits:

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'
];

Extrait du contrôleur:

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

}

Était-ce utile?

La solution

Vous devez prendre en compte que:

  1. Le contrôleur vit sur le côté de Sailsjs, ce qui signifie: est sur le côté serveur (NodeJS).
  2. Le fichier grogneur injecte la bibliothèque de jQuery au HTML qui sera interprété dans le côté du client (navigateur).
  3. C'est pourquoi le contrôleur n'est pas capable de voir la bibliothèque de jQuery.Si vous souhaitez avoir JQuery du côté du serveur (que je trouve étrange), vous devez l'inclure avec NPM:

    npm install jquery
    

    ou plus le plus approprié:

    npm install node-query
    

    Quoi qu'il en soit, si ce que vous recherchez est une prise en charge des promesses, vous pouvez simplement utiliser Q (qui est l'une des bibliothèques promettes les plus utilisées, que ce soit pour le côté client ou le côté serveur).Sur le côté serveur, vous pouvez installer q comme ceci:

    npm install q
    

    (à moins bien sûr que je suis complètement faux et que vous faites un contrôleur "côté client" :).

Autres conseils

Vérifiez la commande dans laquelle vous incluez JQuery sur votre section de tête.

Assurez-vous qu'il devient inclus une fois sur votre page et avant cette ligne

var dfd = $.Deferred();

sur les voiles Version 0.11 JQuery Charge après BOOTSTRAP, pour Mettez JQuery d'abord et n'apparaissez pas une erreur, mon application doit avoir chargé JQuery avant le travail de bootstrap correctement

Vous devez aller à ce chemin sur les tâches / pipeline.js de vos voiles et mettre ce "JS / dépendances / jQuery-version de votre jQuery-.js" à l'intérieur de Var JsfileStojject= [-Here-] entre 'JS/DePendances/Sails.io.js 'et' JS / Dépendances / ** / *. JS 'Comme suit:

// 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'
];

Par exemple, il s'agit d'une mauvaise configuration:

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'
];

Parce que JQuery chargera après qu'App.js, si dans votre application, vous utiliserez une fonction JQuery apparaîtra une erreur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top