2

jQueryStarRatingプラグインfyneworks.com/jquery/star-rating/#tab-GoogleClosureCompilerのADVANCED_OPTIMIZATIONSを使用したテストをコンパイルできるようにexternsファイルを作成しました。

ただし、標準のjQuery externを参照していても、「$」の名前が変更されているため、プラグインが壊れています。

おそらく関連しています:変更されていないプラグインを使用すると、「rating」の名前も変更されます。私はその部分を次のように修正できます:

$.fn['rating'] = function(opts) {

グーグルクロージャーからコンパイルjQueryプラグイン...しかしそれは'$'を修正しません(そして可能であれば変更されていないプラグインを使用するのがいいでしょう)。

externでの私の試みから(これはおそらく間違っているか不完全です):

// ??? for '$'

// this one does NOT prevent 'rating' from being renamed
function rating(arg1) {}

// the following seem to work: they prevent the functions from being renamed
rating.focus = function() {}
rating.blur = function() {}
rating.fill = function() {}
... etc.

コマンドライン(およびダウンロードのrating.sh):

java -jar ../compiler-latest/compiler.jar --formatting pretty_print --compilation_level ADVANCED_OPTIMIZATIONS --externs externs/jquery-1.7.js --externs externs/jquery.rating-extern.js --js original/jquery.rating.js --js_output_file jquery.rating.gcc.js

エラーメッセージ:

Firefox:
$(".star1").rating is not a function
callback: function (value) {
jquery.ratingSampleCode.js (line 9)

Chrome:
Uncaught TypeError: Object [object Object] has no method 'rating'
jquery.ratingSampleCode.js:8

私のサンプルコードから:

$('.star1').rating({
    callback: function (value) {

テストするには:http://prefabsoftware.com/test/rating-july15/

ダウンロードするには:prefabsoftware.com/test/rating-july15.zip

いくつかの便利なリンク:(古いレピュテーションポイントでログインできなかったため、マークダウンとして指定することはできません...)

  • 高度なコンパイルとExterns:developers.google.com/closure/compiler/docs/api-tutorial3#externs
  • サンプルexterns:contrib:code.google.com/p/closure-compiler/source/browse/#svn%2Ftrunk%2Fcontrib%2Fexterns)jQuery自体を含みますが、評価プラグインは含みません
  • その他のexterns:code.google.com/p/closure-compiler/source/browse/#svn%2Ftrunk%2Fexterns

externの簡単な修正はありますか?またはより良い解決策?

ありがとう!


OK、これはexternsファイルで機能します。

$.prototype.rating = function(arg1) {}
jQuery.prototype.rating = function(arg1) {}

$.prototype.rating.focus = function() {}
... etc.
4

2 に答える 2

1

あなたの説明から、あなたはexternファイルを不適切に使用しているように見えます。プラグインのexternファイルを使用すると、他のユーザーがプラグインを参照するコードをコンパイルできます。実際のプラグインコードをコンパイルするために使用することはできません。コードをコンパイルするには、jQueryexternファイルのみが必要です。

jQueryコードスタイルには、Closure-compilerに関する既知の問題があります。特に、次のことは避ける必要があります。

  • $エイリアスの使用。完全なjQuery名前空間を使用します。コンパイラは、エイリアス化された名前空間を適切に処理しません。
  • jQuery.fnエイリアス。代わりに。を使用してjQuery.prototypeください。
  • メソッドを使用しjQuery.extendて、関数プロトタイプまたはパブリックメソッドを追加します。代わりに、それらをプロトタイプに直接追加してください。(例:jQuery.fn.extend({a: 'foo'});になりjQuery.prototype.a = 'foo';ます);

ADVANCED_OPTIMIZATIONSを使用すると、パブリックメソッドとプロトタイプをエクスポートまたは引用する必要があることに注意してください。これは、SIMPLE_OPTIMIZATIONSがプロジェクトにより適していることが判明したことを意味する場合があります。

詳細については、http://blogs.missouristate.edu/web/2011/02/14/jquery-plugins-and-closure-compiler/を参照してください。

于 2012-07-16T02:36:42.453 に答える
0

最新のexternをチェックしてください:https ://github.com/iplabs/closure-compiler/tree/master/contrib/externs

于 2013-03-31T22:39:56.153 に答える