Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Libraries > ctreeview


Автор: s0lman 31.8.2009, 17:19
Привет всем.
Использую сласс CTreeView.
Код

    public function init()
    {
        if(isset($this->htmlOptions['id']))
            $id=$this->htmlOptions['id'];
        else
            $id=$this->htmlOptions['id']=$this->getId();
        if($this->url!==null)
            $this->url=CHtml::normalizeUrl($this->url);
        $cs=Yii::app()->getClientScript();
        $cs->registerCoreScript('treeview');
        $options=$this->getClientOptions();
        $options=$options===array()?'{}' : CJavaScript::encode($options);
        $cs->registerScript('Yii.CTreeView#'.$id,"jQuery(\"#{$id}\").treeview($options);");
        if($this->cssFile===null)
            $cs->registerCssFile($cs->getCoreScriptUrl().'/treeview/jquery.treeview.css');
        else if($this->cssFile!==false)
            $cs->registerCssFile($this->cssFile);

        echo CHtml::tag('ul',$this->htmlOptions,false,false)."\n";
        echo self::saveDataAsHtml($this->data);
    }

Здесь все понятно.
После некоторых манипуляций с массивом $data возникает необходимость заново перерисовать хтмл дерева, ответ должен быть дан ajax'ом. Для этого с котроллера вызываю виджет (понимаю, что идеологически неверно, но пока хоть так заработает smile ) 
Код

$this->widget('NavigationTree',array('data'=>$data,'collapsed'=>false,'htmlOptions'=>array('class'=>'treeview-gray'))) ;

Где NavigationTree - класс, наследуемый от CWidget и методж init из которого приведен выше.
В результате к возвращаемому хтмл не применяются стили, то есть получаю немного не то, что надо)
Результат идентичен, если закомментировать выделенную выше строку в методе init, что меня наводит на мысль, что с контроллера не получается выполнить тот жабаскрипт.
NavigationTree.php лежит, естественно, в protected/components

Кто что может сказать по этому поводу?

Добавлено через 9 минут и 11 секунд
Выделенной строкой должна была быть эта 
Код

$cs->registerScript('Yii.CTreeView#'.$id,"jQuery(\"#{$id}\").treeview($options);");

smile

Автор: IZ@TOP 1.9.2009, 02:01
А вы используете Firefox и Firebug для того, что бы быть полностью уверенным в том, что там уходит и приходит?

Автор: s0lman 1.9.2009, 10:07
IZ@TOP, в смысле уходит и приходит? Запросы javascript выполняются.
Если я закомментирую указанную строку, то в файрбаге все равно будут в списке те же джаваскрипты,  только результирующий хтмл будет без стилей.
При вызове аякса список скриптов не изменяется вообще 

Автор: IZ@TOP 1.9.2009, 13:23
s0lman, я об этом:

Цитата(s0lman @  31.8.2009,  18:19 Найти цитируемый пост)
Результат идентичен, если закомментировать выделенную выше строку в методе init, что меня наводит на мысль, что с контроллера не получается выполнить тот жабаскрипт.


Я так понимаю, что он должен придти на клиента? Он приходит и не исполняется или не приходит вообще?

По поводу стилей: каким образом они применяются к странице?

Автор: s0lman 1.9.2009, 14:33
Цитата(IZ@TOP @  1.9.2009,  13:23 Найти цитируемый пост)
Он приходит и не исполняется или не приходит вообще?

Трудно сказать, т.к. запросы js в файрбаге отображаются только после обновления страницы по F5, при клике по ссылке список запросов пустой. При щелчке по кнопке-вызове аякса  список js запросов не изменяется.
 
Цитата(IZ@TOP @  1.9.2009,  13:23 Найти цитируемый пост)
По поводу стилей: каким образом они применяются к странице? 

Не к странице, а к дереву в формате html
Код

$cs->registerScript('Yii.CTreeView#'.$id,"jQuery(\"#{$id}\").treeview($options);");

это равносильно
Код

$cs->registerScript('Yii.CTreeView#yw0', 'jQuery("#yw0").treeview({"collapsed":false});');

где #yw0 - ИД дерева (<UL>);

Код

$cs->registerCssFile($cs->getCoreScriptUrl().'/treeview/jquery.treeview.css');

в это месте применяются стили (ставятся плюсики, прорисовываются линии и тп), но если закомментироваьть, то результат отличается от того, если js комментировать - нету непонятных лишних линий, корректировку прорисовкой которых, насколько понимаю, js берет на себя.

Автор: IZ@TOP 1.9.2009, 16:39
s0lman, ну, у меня было только одно предположение касательно CSS. Но оно уже отпало. Придется Вам заниматься дебагом, поскольку я с этой системой не работал и, как вижу, поскольку никто не пишет - с подобным не сталкивались.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)