1

requirejs とプライベート jquery で Kendo を使用しようとしています。

プライベート jquery のヒントはここに文書化されています

私のrequirejs設定:

require.config({
    paths: {
        "jquery": "js/jquery-2.0.3.min.js",
        "k": "js/kendo/2013.2.716"
    },
    map: {
        "*": {
            "jquery": "jquery-private",
        },
        "jquery-private": { "jquery": "jquery" },
    }
});
define("jquery-private", ["jquery"], function (jq) {
    return jq.noConflict(true);
});

その後require(["jquery", "k/kendo.dropdown.min"], function(){...})、私はエラーがあります。

Kendo はプライベート jquery では動作しないようです。プライベート jquery で動作させる方法はありますか? シム構成だけが必要ですか?

ありがとう。

4

1 に答える 1

-1

私は剣道が何であるかさえ知らないので、これは純粋な推測ですが、あなたの問題はこれらの問題から生じていると思います:

//This require statement is not correct.
require(["jquery", "k/kendo.dropdown.min"], function(){...})

jQueryを変数にバインドしていないため、後で使用しようとすると存在しません。あなたはおそらくこのようなものが欲しいでしょう。

require(["jquery", "k/kendo.dropdown.min"], function($){

もう 1 つの問題は、剣道プラグインがグローバル jQuery を前提としている可能性が高いことです。つまり、プラグインがその依存関係のローカル変数を適切に宣言およびバインドしていることを確認する必要があります。プラグイン コードは次のようにラップする必要があります。

define([
    'jquery',
  ],
  function (jQuery) {
    //In case it also depends on the $ then set it up here too:
    var $ = jQuery;
    /* The actual kendo plugin stuff...*/
  }
);

これは、noConflict を呼び出すと、グローバルな $ 変数と jQuery 変数のバインドが解除されることを意味するためです。jQueryにバインドするローカル変数を明示的に指定する必要があります。そうしないと、機能しません。ほとんどのプラグインは、jQuery 変数が定義されていることを想定していますが、$ も想定している可能性があります。

PS プラグインが AMD 対応で、define 句が含まれている場合でも、プライベート jQuery で動作するようにプラグインを変更する必要がある可能性があります。一部のプラグインは、define 宣言で依存関係がバインドされ、プラグインに渡されるローカル変数を使用していないようです。代わりに、公に定義されているかどうかに関係なく、何でも使用します (バックボーンなど)。そのため、define 句を使用して、依存関係を記述し、requriejs が何らかの形式の jQuery を確実にロードするようにしていますが、実際にはそれらを使用することはありません。ただし、これは jQuery には当てはまりません。

于 2013-11-18T09:00:09.823 に答える