2013-04-15 3 views
5

매우 오래된 jQuery (1.2.6, 1.4.3) 버전에서 최신 버전으로 업그레이드하는 중입니다. 버전 (1.9.1). 상황은 꽤 잘 진행되고 있습니다. 마이그레이션 스크립트는 1.6.4에서 1.9.1에 불과하지만 많은 분류 작업을 수행합니다. 분류 작업이 필요한 대부분의 변경 사항이 있다고 생각합니다. 내가 .attr()에서 .prop()에 변경되는 주요 하나,하지만로 실행 한 문제의 몇 가지있다jQuery 업그레이드, .attr 및 .prop - 1.2.6 - 1.9.1

- 우리가) (.prop 사용하도록 변경하면 우리의 모든 코드가 .attr()을 사용하기 때문에 일부 나누기, 특히 상점에서 제품을 필터링하는 데 사용되는 링크 - AJAX 호출을 호출하고 클릭시 다른 처리를 수행합니다.

(매우 큰 공기 따옴표) 내 최초의 "수정"은 하나에서 다른 단순히 리디렉션 호출에 기반

:

$.fn.attr = $.fn.prop; 

나는이가 있지만, 버그의 전체 세계를 소개 확신 초기에 깨진 것을 고쳤다. 그 이후로, 나는 그로 인해 (지금까지 어쨌든) href 속성 (#에서 시작하는 앵커 일 수 있음)이 전체 정규화 된 URL을 반환하도록하는 추가 버그를 발견했습니다. - http://jsfiddle.net/eT6xE/1/

<a href="#something"><span>Product Details</span></a> 
<div></div> 

$('div').append($('a').attr('href')); 
$('div').append('<br />' + $('a').prop('href')); 
// #something \n http://fiddle.jshell.net/eT6xE/1/show/#something 

내가 알아 차 렸던 유일한 버그 인 것을 감안할 때, 나는 조금 놀아본 후 그것을 해결할 수있는 해결책을 생각해 냈습니다. http://jsfiddle.net/M92CE/1/ - 원래 기능을 다시 도입하는 데 효과가있는 것 같습니다. href attr/prop 문제에 대한 상당히 깨끗한 솔루션 인 것처럼 보이지만 초기 수정 사항이 ... 될 수있는 것보다 훨씬 짧다 고 생각합니다.

이 기능을 다시 도입 할 수있는 "표준"방법이 있습니까? 그렇지 않은 경우 더 좋은 방법이 있습니까?

건배.

+0

나는 함수를 오버라이드하는 것과 비슷한 것을 할 것이지만, 오래된 코드에서 새로운 것으로의 할당을하기보다는 새로운 함수에 위임하고, 어떤 행동 변화를 처리하며, 또한 클라이언트 코드가 이전 접근 방식에서 벗어나도록 deprecation warning (콘솔 사용과 같은) 경고 형식을 던집니다. –

답변

5

jQuery 1.9는 이전 버전에서 더 이상 사용되지 않는 이전 기능이 인 개를 제거했습니다. jQuery 1.2에서 1.9로 이동하면 찾은 것처럼 꽤 많은 것을 칠 수 있습니다.

다행히도 jQuery 1.9에는 이전 버전과의 호환성을 위해 jQuery Migrate이라는 보조 라이브러리가 있으며 1.9에서 제거 된 이전의 폐기 된 기능을 모두 되돌려 놓습니다.

이전 코드를 최신 jQuery 버전으로 백업하고 실행해야하는 경우 jQuery Migrate를 사용하여 작동 시키십시오.

그러나 마이그레이션 라이브러리의 목적은 코드를 이전 상태로 두지 않고 새로운 기능으로 전환하는 데 도움이된다는 사실을 기억하십시오. 따라서 Migrate를 사용하여 코드를 작동 시키되, Migrate가 필요하지 않도록 코드를 변경해야합니다.

코드의 양에 따라 약간의 작업이있을 수 있지만 여기에서 마이그레이션을 사용하면 모든 것을 한꺼번에 수정하지 않고도 하나씩 수정할 수 있습니다.

희망이 있습니다.