2011-09-23 4 views
1

나는 비교적 오래된 Prado 2.1RC1에서 실행되는 webapp을 가지고 있으며, 어떤 것을 추가하여 향상시키고 자 노력 중이다. google visualizations charts.어떻게이 자바 스크립트 충돌 엉망 (jquery + 프로토 타입 + Google 시각화 + PRADO PHP)을 고칠 수 있습니까?

Google jsapi (jquery에 따라 다름)와 prado2.1에서 사용한 이전 라이브러리를 통합하는 순간 문제가 발생했습니다.

은 프라도 일부가 내장 된 라이브러리를 사용 + 프로토 타입 1.4 (그들 중 일부는 base.js, dom.js, 은 ajax.js 등이다).

첫 번째 순간에 tutorial example을 통합하려고 시도했을 때 크롬 자바 스크립트 콘솔에 두 개의 오류가 기록되었습니다. 때이

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

을하지만 : 변화는 다음과 같이 구현되어 있기 때문에

Uncaught RangeError: Invalid array length on base.js:524

Uncaught TypeError: undefined is not a function

base.js 보면서 나는 이동 기능의 프로토 타입 버그로 인해 발생하는 errores은 (내가 생각하는) 것을 알아 냈다 .length == 0, this.length-- 폭발합니다.

그래서이 버그를 수정 한 후에 Google 멋진 차트가 표시 될 것이라는 희망을 갖게되었습니다. 어떤 오류가 자바 스크립트 콘솔에 던져 없지만 구글 차트를 추가해야 어디 사업부에서 빨간색 배경 렌더링이 텍스트를했습니다 :

number is not a function

나는이 오류에 대한 단서가 없다. 나는 webapp에 필요한 자바 스크립트 라이브러리의 큰 양의 일부 난장판이 의심됩니다.

오래 전부터 비추천되고 지원되지 않는 Prado 및 Prototype 버전을 사용하고 있다는 것을 고려하면 상황이 좋지 않다는 것을 알고 있습니다. 그러나 나는 PHP와이 프레임 워크를 사용하여 매우 n00b입니다. 필자는 자바 스크립트 라이브러리를 업데이트하기 위해 새로운 Prado 버전으로 마이그레이션하는 데 얼마나 많은 시간이 걸릴지 알지 못합니다. 어쩌면 더 많은 경험을 가진 당신 중 일부는이 상황에서해야 할 최선의 일이 무엇인지 또는 어떻게 진행해야하는지 알려줄 수 있습니다 ...

감사합니다 !! 문제에 대해 더 자세한 정보가 필요하면 알려주십시오.

+0

그게 문제라면?). – oli

답변

2

이것이 정확하게 문제가되는지는 잘 모르겠지만 이해할 경우 jquery/google jsapi를 프로젝트에 통합하려고 할 때 문제가 발생했다고 생각됩니다.

jquery가 필요하지 않으며 jsapi (및 필요한 시각화 패키지)를 직접로드 할 수 있습니다. 이 코드는 네임 스페이스 (예 : google.x.y) 여야하며 다른 코드를 간섭하지 않아야합니다. 여기

당신이 JQuery와없이 JSAPI를로드하는 방법은 다음과 같습니다

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

문제인가요?

+0

정확히, 기본적으로 Google jsapi를 내 프로젝트에 통합 할 때 문제가 있습니다. 가능하면 내 프로젝트 js 라이브러리가 일부 기능을 가진 배열을 "확장"하고 jsapi가이 방법을 사용하고 있지만 잘못 되었습니까? – flyer88

0

Prado는 Prototype을 사용하고 있으므로 Prototype과 jQuery에서 "$"를 사용하므로 $ (# selector) 대신 (jQuery) (# selector)를 명시 적으로 작성해야합니다. 문제의 근본 원인 일 수 있습니다.

0

저는 jQuery로 구동되는 템플릿을 가지고 있으며, 이것을 프로젝트의 레이아웃 (마스터 페이지)으로 사용했습니다.

$("selector")jQuery("selector")으로 바꿨을 때 프로토 타입과 jQuery 간의 충돌을 피했습니다.

0

Google api의 jquery 래퍼를 사용하지 않는 것이 좋습니다. 이는 $를 사용하여 jQuery와 프로토 타입간에 충돌이 있기 때문입니다. 여전히 jQuery를 사용해야하는 경우 jQuery에 전역 포인터로 $를 지정하지 않으려면 jQuery.noConflict()를 호출해야합니다.

jotype이 포함 된 후 jquery를 호출하고 noConflict()를 호출해야합니다.

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

com : TForm 후에 입력해야합니다. TForm이 prototype.js 링크를 페이지에 추가하기 때문입니다. 그런 다음 google jquery 래퍼를 포함하십시오.

지금 "$"포인트는 jQuery를

과 "jQuery를"포인트를 프로토 타입

JQuery와 사이트에 설명 here

는하지만 난 잘 모르겠어요 (구글 JSAPI에 대한 jQuery를 사용할 필요가 없습니다