1

Prado 2.1RC1 で実行されている比較的古い webapp があり、いくつかの素敵なGoogle 視覚化チャートを追加して強化しようとしています。

この問題は、Google jsapi (jquery に依存) と prado2.1 で使用される古いライブラリを統合するときに発生しました。

Prado はいくつかの組み込みライブラリ ( base.jsdom.jsajax.jsなど) +プロトタイプ 1.4を使用します。

チュートリアルの例を統合しようとした最初の瞬間に、Chrome JavaScript コンソールに 2 つのエラーが記録されました。

Uncaught RangeError: base.js:524の無効な配列の長さ

キャッチされていない TypeError: undefined は関数ではありません

base.jsを見ると、シフトが次のように実装されているため、これらのエラーはシフト関数のプロトタイプのバグが原因であることがわかりました (私はそう思います)。

shift function() {
    var result = this[0];
    for (var i = 0; i < this.length - 1; i++)
      this[i] = this[i + 1];
    this.length--;
    return result;
  }

しかし、this.length==0 の場合、this.length-- が爆発します。

したがって、このバグを修正した後、グーグルの素敵なチャートが表示されることを期待していました...しかし、違います。JavaScriptコンソールでエラーはスローされませんでしたが、Googleチャートを追加する必要があるdivで、このテキストを赤い背景でレンダリングしました:

数値は関数ではありません

このエラーについてはわかりません。webapp に必要な大量の JavaScript ライブラリが混乱していると思われます。

古い非推奨のサポートされていないバージョンの Prado と Prototype を使用していることを考えると、状況があまり良くないことはわかっています。しかし、私はphpとこのフレームワークに非常に慣れていません。の新しい Prado バージョンに移行して JavaScript ライブラリを更新するのにどれくらいの時間がかかるか、実際にはわかりません。経験豊富な方の中には、この状況で何をするのが最善か、またはどのように進めるべきかを教えてくれるかもしれません...

ありがとう!!問題の詳細が必要な場合はお知らせください。

4

4 に答える 4

2

これがまさにあなたの問題かどうかはわかりませんが、私の理解では、jquery/google jsapi をプロジェクトに統合しようとしたときに問題に気付いたようです。

これにはjqueryは必要なく、jsapi(および必要な視覚化パッケージ)を直接ロードできます。これらは (google.xy のように) 名前空間を設定し、他のコードに干渉しないようにする必要があります。

jquery なしで jsapi をロードする方法は次のとおりです。

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
  google.load('visualization', '1', {packages: ['table']});
</script>

それが問題ですか?

于 2011-09-25T11:19:07.590 に答える
0

PradoはPrototypeを使用しており、「$」はPrototypeとjQueryの両方で使用されるため、$(#selector)ではなく(jQuery)(#selector)を明示的に記述するようにしてください。それが問題の根本的な原因である可能性があります。

于 2012-06-25T12:19:11.310 に答える
0

jQuery を利用したテンプレートがあり、それをプロジェクトのレイアウト (マスター ページ) として使用しました。

$("selector")すべてをに置き換えたときに、プロトタイプと jQuery の間の競合を回避しましたjQuery("selector")

于 2012-08-22T22:01:48.713 に答える
0

Google API の jquery ラッパーを使用しない方がよいと思います。これは、両方とも $ を使用する jQuery とプロトタイプの間に競合があるためです。それでも jQuery を使用する必要がある場合は、jQuery.noConflict() を呼び出して、jquery へのグローバル ポインターとして $ を割り当てないように jQuery に指示する必要があります。

prototype.js をインクルードした後、jquery をインクルードして noConflict() を呼び出す必要があります。

<script src="jquery.js"></script>
<script>
 jQuery.noConflict();
 </script>

com:TForm の後に配置する必要があります。TForm は、prototype.js リンクをページに追加するためです。次に、Google jquery ラッパーをインクルードします。

"$" はプロトタイプを指し、"jQuery" は jQuery を指すようになりました

ここのJQueryサイトで説明されています

于 2012-09-18T15:26:37.637 に答える