Как я могу исправить этот беспорядок конфликта javascript (jquery + прототип + визуализация google + PRADO php)? - PullRequest
1 голос
/ 24 сентября 2011

У меня довольно старое веб-приложение, работающее на Prado 2.1RC1, и я пытаюсь улучшить его, добавив несколько хороших диаграмм визуализаций Google .

Проблема возникла в момент интеграции с Googlejsapi (это зависит от jquery) и старые библиотеки, используемые prado2.1.

Prado использует некоторые встроенные библиотеки (некоторые из них base.js , dom.js , ajax.js и т. д.) + прототип 1.4 .

В первый момент, когда я попытался интегрировать учебный пример В консоли chrome javascript зарегистрировано две ошибки.

Uncaught RangeError: Неверная длина массива в base.js: 524

Uncaught TypeError: undefined isне функция

Глядя на 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-- взрывается.

Так что после исправления этой ошибки у меня была надежда, что в Google появятся хорошие графики ... Но нет.В консоли javascript не было выдано никакой ошибки, но я получил этот текст с красным фоном в div, где должна быть добавлена ​​диаграмма Google:

число не является функцией

Я не имею понятия об этой ошибке.Я подозреваю, что в веб-приложении есть какая-то путаница с большим количеством библиотек javascript.

Я знаю, что ситуация не очень хорошая, учитывая, что я использую старую устаревшую не поддерживаемую версию Prado иПрототип.Но я очень n00b с php и с этой структурой.Я действительно не знаю, сколько времени мне потребуется, чтобы перейти на новую версию Prado для обновления библиотек javascript, и я даже знаю, смогу ли я это сделать.Может быть, некоторые из вас с большим опытом могут сказать мне, что лучше всего делать в этой ситуации или как мне действовать ...

Спасибо!И дайте мне знать, если вам нужно больше деталей в проблеме.

Ответы [ 4 ]

2 голосов
/ 25 сентября 2011

Я не уверен, что это именно ваша проблема, но, насколько я понимаю, вы заметили проблемы, когда пытались интегрировать jquery / google jsapi в свой проект.

Вам не нужен jquery для этого, и вы можете напрямую загрузить jsapi (и необходимые пакеты визуализации). Они должны быть в пространстве имен (например, google.x.y) и не мешать вашему другому коду - хотя я могу ошибаться в том, как это может испортить ситуацию.

Вот как вы можете загрузить jsapi без jquery:

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

Это проблема?

0 голосов
/ 18 сентября 2012

Я полагаю, что, может быть, лучше не использовать jquery-оболочку Google API.Это потому, что существует конфликт между 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 wrapper.

теперь «$» указывает на прототип, а «jQuery» указывает на jQuery

Объяснено на сайте JQuery здесь

0 голосов
/ 23 августа 2012

У меня был шаблон на основе jQuery, и я использовал его в качестве макета (главной страницы) для своего проекта.

Я избежал конфликтов между прототипом и jQuery, когда заменил все $("selector") на jQuery("selector").

0 голосов
/ 25 июня 2012

Поскольку Прадо использует Prototype, а Prototype и jQuery используют «$», убедитесь, что вы явно пишете (jQuery) (# selector) вместо $ (# selector).Это может быть основной причиной вашей проблемы.

...