Domanda

Provo a implementare le interrogazioni multiple Sincronizzate in una funzione di controller. Jquery.js è posizionato prima ** / * nel Gruntfile.Io uso le vele v0.9.4. Primo errore:

"$ is not defined"
.

si verifica qui:

var dfd = $.Deferred();
.

Sono nuovo a JS e relativamente nuovo per navigare e la mia bella ricerca per quella domanda era assolutamente senza successo.

Grazie in anticipo, Martin

PS: GruntFile Extrapt:

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

Controller Extrapt:

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

}
.

È stato utile?

Soluzione

Dovresti tenere conto che:

    .
  1. Il controller vive sul lato Sailsjs, il che significa: è sul lato server (Nodejs).
  2. Il file Grunt sta iniettando la libreria jQuery all'HTML che verrà interpretata nel lato client (browser).
  3. Ecco perché il controller non è in grado di vedere la libreria jQuery.Se vuoi avere jquery nel lato server (che trovo in qualche modo dispari) dovresti includerlo con NPM:

    npm install jquery
    
    .

    o più appropriato:

    npm install node-query
    
    .

    Comunque, se ciò che stai cercando è il supporto delle promesse, allora puoi semplicemente usare q (che è una delle librerie di Promises più utilizzate là fuori, sia per il lato client o il lato server).Sul lato server, è possibile installare Q come questo:

    npm install q
    
    .

    (A meno che, naturalmente, non torni completamente sbagliato e stai facendo un controller "lato client" :).

Altri suggerimenti

Controllare l'ordine in cui si include jQuery sulla sezione della testa.

Assicurati che venga incluso una volta sulla tua pagina e prima di questa riga

var dfd = $.Deferred();
.

On Sails versione 0.11 JQuery Load After Bootstrap, per Put JQuery prima e non appaiono un errore, la mia app deve aver caricato jQuery prima per Bootstrap funziona correttamente

È necessario andare su questo percorso sulle tue vele 'compiti / pipeline.js' e metti queste 'js / dipendenze / jquery-versione del tuo jquery-.js' dentro di var jsfilestoinject= [-here-] tra 'js/ /sependenze/sails.io.js 'e' js / dipendenze / ** / *. js 'come segue:

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

Ad esempio, questa è una cattiva configurazione:

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

Poiché JQuery caricherà dopo l'app.JS, se nella tua app userai una funzione jQuery verrà visualizzata un errore

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top