Pregunta

Intento implementar las consultas de búsqueda múltiple sincronizadas en una función de controlador. Jquery.js se coloca antes ** / * en el muelle.Yo uso las velas v0.9.4. Primer error:

"$ is not defined"

ocurre aquí:

var dfd = $.Deferred();

Soy nuevo en JS y relativamente nuevo en velas y mi larga investigación para esa pregunta fue absolutamente sin éxito.

gracias de antemano, Martin

PS: Extracto de 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'
];

Extracto del controlador:

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

}

¿Fue útil?

Solución

Debe tener en cuenta que:

  1. El controlador vive en el lado de SailSjs, lo que significa: Está en el lado del servidor (NODEJS).
  2. El archivo gruñido está inyectando la biblioteca de jQuery al HTML que se interpretará en el lado del cliente (navegador).
  3. Es por eso que el controlador no es capaz de ver la biblioteca de jQuery.Si desea hacer jquery en el lado del servidor (que encuentro de alguna manera extraño), debe incluirlo con NPM:

    npm install jquery
    

    o lo más apropiado:

    npm install node-query
    

    De todos modos, si lo que está buscando es el soporte de promesas, entonces puede usar q (que es una de las bibliotecas de promesas más utilizadas, ya sea para el lado del cliente o el lado del servidor).En el lado del servidor, puede instalar q así:

    npm install q
    

    (a menos que, por supuesto, estoy completamente equivocado y está haciendo un controlador "lado-lado" :).

Otros consejos

Revise el orden en el que está incluyendo jQuery en la sección de su cabeza.

Asegúrese de que se incluye una vez en su página y antes de esta línea

var dfd = $.Deferred();

En la versión de velocidad 0.11 Carga de jQuery después de Bootstrap, para poner a JQUERY primero y no aparezca un error, mi aplicación debe haber cargado jQuery antes de trabajar de Bootstrap funcionar correctamente

Debe ir a esta ruta en las tareas de las velas / Pipeline.js 'y poner esta' JS / dependences / versión jQuery de su jQuery-.js 'dentro de var jsfilestoinject= [-here-] entre' js/dependencias/sails.io.js 'y' JS / dependences / ** / *. JS 'como Siguiendo:

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

Por ejemplo, esta es una mala configuración:

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

Porque Jquery se cargará después de App.js, si en su aplicación, utilizará una función JQery, aparecerá un error

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top