2013-10-21 1 views
0

나는 ajax 호출을하고 페이지의 내용을 renderPartial로 업데이트하는 페이지 뷰를 가지고있다.Yii renderPartial with external javascript

그래서 page.php -> _pagePartial.php (아약스 갱신) page.php에

나는 다음 번 자바 스크립트 파일을 포함 아약스 렌더링 발생 후 변경이 적용되는 DOM을 갖고 싶어. 이 JS 파일을 모든 AJAX 새로 고침에로드하는 것은 이치에 맞지 않습니다.

$baseUrl = Yii::app()->baseUrl; 
$basePath = Yii::app()->basePath; 
$cs  = Yii::app()->getClientScript(); 
$cs->registerScriptFile($baseUrl . '/js/jquery.ui.js'); // load one time! 

page.php

예를 들면

다음 pagePartial.php

// every ajax partial load 
    $('#sortable-list-left').sortable({ 
       connectWith:'.productEntryCol', 
       placeholder: 'ui-state-highlight', 
       update: function(event, ui) { 
        var sortOrderLeft = getSortOrder('sortable-list-left'); 
        var sortOrderRight = getSortOrder('sortable-list-right'); 
        var projectId = '" . $project_id . "'; 
        $.ajax({ 
         data: { left: sortOrderLeft, right : sortOrderRight, id : projectId}, 
         url: '/project/ajaxUpdateOrder', 
         type: 'POST', 
         success: function(response){ 
          // process JSON response 
          var obj = jQuery.parseJSON(response); 
         } 
        }); 
       } 
      }); 

에서 문제 AJAX 통해 _pagePartial가로드가 .sortable() 메소드를 사용할 수 후이다.

이 문제를 해결하는 적절한 방법은 무엇입니까?

감사

답변

2

나는이 문제를 해결할 방법은 무엇이든, 성공의 기능에 코드를 추가하거나 $.load 또는 $.ajax에 기본보기에 있습니다. 그래서 예를 들면

:

또 다른 옵션과 같이 함수로 아약스로드 페이지 ('_pagePartial.php')에 자바 스크립트를 추가하는 것입니다
$.get('_pagePartial.php', null, function(html) { 
    $('#result').html(html); 
    $('#sortable-list-left').sortable({ 
     //all your sortable code 
    }); 
}); 

:

function firejs() { 
    $('#sortable-list-left').sortable({ 
     //all your sortable code 
    }); 
} 

를 다음에 메인 뷰 ('page.php')에 성공적으로 아약스 호출 단순히이 추가

$.get('_pagePartial.php', null, function(html) { 
    $('#result').html(html); 
    firejs(); 
}); 

당신은 개체에 바인딩 할 수 있습니다 DOM에 추가되고 ajax 호출이 성공적으로 끝나고 결과가 DOM에 추가 될 때까지 DOM에 추가되지 않을 때까지

또한 단지 참고 YII는 내장 jqueryui 간단하게 말할 수있다 :

도 함께, 같은 문제를 가지고 나 같은 사람들을 위해
Yii::app()->clientScript->registerCoreScript('jquery.ui'); 
Yii::app()->clientScript->registerCoreScript('jquery'); 
+0

굉장히 시험해 보겠습니다. – bonez

+0

대부분의 작업을로드하고 작동하지만 JQuery UI draggable-item은 페이지로드 당 한 번만 작동 한 다음 다시 작동하지 않습니다. 실제로 JS를 partialView에 두는 것은 항상 작동합니다. – bonez

+0

draggable에 대한 Jquery UI 키 바인딩 작업과 관련이 있는지 궁금합니다 – bonez

1

: 여전히

Yii::app()->clientscript->scriptMap['jquery.js'] = false; 
renderPartial에서

및 작동하지. 다른 해결책을 찾았습니다. 내가 생각하기에 더 효과적인 방법입니다. 가장 쉬운 해결책은 renderPartial의 네 번째 매개 변수를 설정하는 것입니다.

public string renderPartial(string $view, array $data=NULL, boolean $return=false, boolean $processOutput=false) 

RenderPartial-detail 그것은 약 processOutput true로 넣어 .If 다음 JQuery와 당신의 렌더링 부분에로드 될 것이다.

희망이 누군가를 도울 것입니다 ...