CI 묻고 답하기

제목 CI 자바스크립트 로딩
글쓴이 유마 작성시각 2012/11/26 14:11:07
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 15628   RSS
일반 php 하고 다른 점이 있나요?

<body>
<script></script>
</body>

이렇게 바디에 넣어도 보고 <head></head> 안에도 넣어도 보고 여러가지 해봤는데..

뷰 페이지가 너무 빨리 뿌려지는지.. js 파일에서 선언해놓은 함수가 선언되지 않아서 오류가 뜰 때가 있어요.

즉, js 파일이 읽어지지 않아서 그 안에 선언해놓은 게 없다고 뜹니다..

바디에 넣던 헤드에 넣던... 왠만하면 이런 일이 없는데... CI에서는 이렇네요..


뭐가 문제일까요?



밑에 뜨는 log가 원래 저 tapImgChange 함수를 실행하면 나오는 메세지입니다.

근데 로딩후 초반에는 간혹 저게 실행되지 않고.. 저렇게 뜰 때가 있습니다.
 다음글 어디서부터 시작을 해야할지 모르겠네요.ㅠㅠ (8)
 이전글 다중 사용자 블로그 만들때 문의 (1)

댓글

변종원(웅파) / 2012/11/26 15:39:46 / 추천 0

mvc 패턴은 지켜지고 있는거죠? 뷰가 없다거나 컨트롤러에서 처리한다거나 하지는 않는지요?

헤더, 푸터는 어떻게 처리하는지 상황을 알아야 답변이 가능합니다.

_remap 같은 걸 쓰는지 컨트롤러에서 그냥 헤더, 푸터를 선언하여 쓰는지에 따라도 달라집니다. 

유마 / 2012/11/26 15:53:24 / 추천 0
 
// head 로 넘겨줄 데이터 //
        $data['head'] = array(
            'trans_fr'      => $trans_fr,
            'footer'        => $footer,
            'head_logo'     => logo_display($trans_fr),
            'head_info'     => $this->ci->common_m->getMetaData($uri_string),
            'jtx'           => $jtx,
            'mem_total'     => $this->ci->common_m->getSysMemTypePerCount(),
            'login_mem'     => $login_mem,
            'tap_menu'      => getTapmenuImg($this->ci->uri->segment(1))
        );
        // head 로 넘겨줄 데이터 //

        // left 로 넘겨줄 데이터 //
        $data['left'] = array(
            'trans_fr'          => $trans_fr,
            'jtx'               => $jtx,
            'login_mem'         => $login_mem,
            'left_evaluation'   => getEvaluation($left_evaluation),
            'interview'         => get_interview()
        );
        // left 로 넘겨줄 데이터 //

        $data['footer'] = array(
            'footer' => $footer
        );

        $view['head'] = $this->ci->load->view('include/head', $data['head'], TRUE);
        $view['leftLogin'] = $this->ci->load->view('include/leftLogin', $data['left'], TRUE);
        $view['leftMenu'] = $this->ci->load->view('include/leftMenu', $data['left'], TRUE);
        $view['footer'] = $this->ci->load->view('include/footer', $data['footer'], TRUE);

        $this->ci->load->vars($view);
        unset($data);

이렇게 hook 에서  head, left, footer 값들을 만들어서 던져두고...

function _remap($method)
    {
        if($method == 'index') {
            $this->index();
        } else {
            $this->{$method."_method"}();
        }
    }

function index()
    {
        $this->load->view('speed/speed_trans', $view);
    }

    function speeds_method()
    {
        $this->load->view('speed/speeds', $view);
    }


컨트롤러에서 _remap 으로 처리를 합니다...

javascript는 footer 에서 </body> 앞에 삽입해보고... <head> 안에도 삽입해보고 하는데..
로딩될 동안 javascript를 못 읽는 경우가 있는 듯 합니다.
변종원(웅파) / 2012/11/26 16:47:20 / 추천 0
$this->output->set_output(); 이걸 컨트롤러의 최종 뷰 다음에 넣어보세요.

hook 시점은 언제인가요?
유마 / 2012/11/26 16:55:10 / 추천 0
hook 시점은 post_controller_constructor 이때네요.
유마 / 2012/11/26 17:04:38 / 추천 0
 해보니까..  </body> 앞에 스크립트 넣으니까.. 로딩이 살짝 느린가 보네요..
여전히 선언이 되어 있지 않다고 뜨고요.. 물론, 가끔!

<head> 안에 넣으니까.. 아무 문제 없이 잘 되고요..

그리고, $this->output->set_output(); 로 출력하니깐 속도가 조금 더 빨라졌네요?