1

我在 Prado 2.1RC1 上运行了一个相对较旧的 webapp,我正在尝试通过添加一些不错的google 可视化图表来增强它。

在集成 google jsapi(依赖于 jquery)和 prado2.1 使用的旧库时出现了问题。

Prado 使用一些内置库(其中一些是base.jsdom.jsajax.js等)+原型 1.4

在我尝试集成教程示例的第一刻,我在 chrome javascript 控制台中记录了两个错误。

未捕获的 RangeError:base.js:524上的数组长度无效

未捕获的类型错误:未定义不是函数

查看base.js,我发现这些错误是由 shift 函数中的原型错误引起的(我认为),因为 shift 是这样实现的:

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 控制台中没有引发错误,但我在应该附加谷歌图表的 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

I beleive that it maybe better to not use the jquery wrapper of the google api. This is because there is a conflict between jQuery and prototype both using $. If you still must use jQuery you need to call jQuery.noConflict() to tell jQuery to not assign $ as the global pointer to jquery

After the prototype.js is included u need to include jquery and call noConflict().

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

It should be put after com:TForm. because TForm adds the prototype.js link to the page. Then include the google jquery wrapper.

now "$" points to prototype and "jQuery" points to jQuery

Explained on the JQuery site here

于 2012-09-18T15:26:37.637 回答
0

由于 Prado 使用 Prototype 并且 Prototype 和 jQuery 都使用“$”,因此请确保您明确编写 (jQuery)(#selector) 而不是 $(#selector)。这可能是您的问题的根本原因。

于 2012-06-25T12:19:11.310 回答
0

我有一个由 jQuery 提供支持的模板,我将它用作我的项目的布局(母版页)。

当我将所有内容替换$("selector")jQuery("selector").

于 2012-08-22T22:01:48.713 回答