帆菌コントローラでjQueryを使う方法。( "$が定義されていません")

StackOverflow https://stackoverflow.com//questions/24042304

  •  21-12-2019
  •  | 
  •  

質問

同期の複数の検索クエリをコントローラ関数に実装しようとします。 jQuery.jsはGruntFileで** / *の前に配置されています。私は帆v0.9.4を使います。 最初のエラー:

"$ is not defined"
.

が発生します。

var dfd = $.Deferred();
.

私はJSにとって新しい帆やその質問に対する私のかなり長い研究は絶対に連れていませんでした。

事前にありがとう、 マーティン

PS: GruntFile Excerpt:

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

}
.

役に立ちましたか?

解決

それを考慮に入れるべきです:

  1. コントローラはSailsJS側に住んでいます。つまり、サーバー(NodeJS)側にあります。
  2. Gruntファイルは、クライアント(ブラウザ)側で解釈されるHTMLにjQueryライブラリを挿入しています。
  3. それがコントローラがjQueryライブラリを見ることができない理由です。サーバー側でjQueryを実行したい場合(どういうわけか奇数が見つかった)を含める必要があります。

    npm install jquery
    
    .

    またはより適切なもの:

    npm install node-query
    
    .

    とにかく、探しているものが約束のサポートを宣伝する場合は、Q(クライアント側またはサーバー側のどちらかに最も使用されている約束ライブラリの1つで)を使用するだけです。サーバー側では、次のようにQをインストールできます。

    npm install q
    
    .

    (もちろん私が完全に間違っていない限り、「クライアント側」コントローラをやっている場合は)。

他のヒント

あなたがあなたの頭部のjQueryを含めている順序を確認してください。

あなたのページに1回、そしてこの行の前に含まれていることを確認してください

var dfd = $.Deferred();
.

帆走版0.11 jQuery Load Bootstrapの後、最初にjQueryを入れてエラーが表示されていないため、私のアプリはブートストラップ作業のために正しく機能する前にjQueryをロードしなければならなかった

あなたはあなたの帆の「タスク/ pipeline.js」でこのパスに行き、 'JS /依存関係/ jquery-version of jsfilestoinject= [every-]の間にある「js / enesencies / jquery-version」を' JSの間に置く必要があります。/ dependencies/sails.io.js 'と' js /依存関係/ ** / *。次のような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関数がエラー

に表示されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top