CGridView и dialog

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Professor
Сообщения: 115
Зарегистрирован: 2010.11.25, 19:47
Контактная информация:

CGridView и dialog

Сообщение Professor »

Здравствуйте.

Пытаюсь сделать выбор в диалоговом окне как показано на рисунке.

Проблема заключается в том, что при выполнении какого либо действия(перемещение по странице, поиск), JS не воспринимает Новые HTML элементы.


Мне нужно что бы при клике на ссылку выполнялось какое либо действие и закрывалось диалоговое окно.
Вложения
CGridView.jpg
CGridView.jpg (174.94 КБ) 5190 просмотров
Аватара пользователя
Sampad
Сообщения: 71
Зарегистрирован: 2010.11.22, 23:43

Re: CGridView и dialog

Сообщение Sampad »

Тут чистая javascript в ссылке.
Просто закрой диалоговое окно и все.

Точнее сделай вместо ссылки div + onclick + руку при наведении в css
Professor
Сообщения: 115
Зарегистрирован: 2010.11.25, 19:47
Контактная информация:

Re: CGridView и dialog

Сообщение Professor »

Спасибо, пока сделал с onclick, но хотелось бы без использования onclick.
Аватара пользователя
Sampad
Сообщения: 71
Зарегистрирован: 2010.11.22, 23:43

Re: CGridView и dialog

Сообщение Sampad »

Без использования onclick в принципе невозможно (если не хочешь перезагружать станицу).
Professor
Сообщения: 115
Зарегистрирован: 2010.11.25, 19:47
Контактная информация:

Re: CGridView и dialog

Сообщение Professor »

а как же jquery?

Код: Выделить всё

$("a").click(); 
Так что теоретически возможно наверно.
Professor
Сообщения: 115
Зарегистрирован: 2010.11.25, 19:47
Контактная информация:

Re: CGridView и dialog

Сообщение Professor »

В общем новая проблема с этим же.

В диалоговом окне есть категории и список товаров.(см рисунок)
При клике на категорию Ajax ом подгружается CGridView. Все работает, НО, если мы просмотрели больше 1 категории то при поиске в CGridView сразу идет куча ajax запросов(столько, сколько категорий просмотрели). Я предполагаю что это из за подключаемых JS. Чем больше мы просмотрели категорий, тем больше подключилось JS.
Как быть в такой ситуации?

Код: Выделить всё

    $(".category").click(function(){
        var url= "/products/admin/ShowListProducts/id/"+$(this).attr("id").replace("a_","");
        $.ajax({
            url:url,
            type:"post",
            success: function(data){
                $("#products_list_1").html(data);
            }
        });
        return false;
    });  
 
Актион ShowListProducts

Код: Выделить всё

    public function actionShowListProducts($id) {
        $id = (int) $id;
        $products = new Products("search");
        $products->unsetAttributes(); 
        if (isset($_GET['Products']))
            $products->attributes = $_GET['Products'];

        $products->cid = $id;

        $this->renderPartial('_products_list', array("products"=>$products,"cid"=>$cid), false, true);
    }
 

Отображение _products_list

Код: Выделить всё

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'page-grid-recomend',
    'ajaxUrl' => "/products/admin/ShowListProducts/id/" . $cid,
    'dataProvider' => $products->SearchCopy(),
    'filter' => $products,
    'columns' => array(
        'bar_code',
        'edp_code',
        array(
            "name" => "name",
            'type' => 'raw',
            'value' => 'CHtml::link($data->name, "#", array("class"=>"product_select","id"=>$data->id,"onclick"=>"elementSelected($data->id);"))',
        ),
        ))
);
 
Вложения
CGridView.jpg
CGridView.jpg (182.86 КБ) 5156 просмотров
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: CGridView и dialog

Сообщение because »

а что если в первый раз renderPartial вызывать с 4-м параметром true, а в остальные разы с false ?
RTFM !
Аватара пользователя
Sampad
Сообщения: 71
Зарегистрирован: 2010.11.22, 23:43

Re: CGridView и dialog

Сообщение Sampad »

Professor писал(а):а как же jquery?

Код: Выделить всё

$("a").click(); 
Так что теоретически возможно наверно.
Это и есть навешивание события onclick на ссылку.
Аватара пользователя
Sampad
Сообщения: 71
Зарегистрирован: 2010.11.22, 23:43

Re: CGridView и dialog

Сообщение Sampad »

По второму вопросу трудного говорить тут надо смотреть весь комплекс.
Смысл обычной админки - при выборе фильтра подгружается вся страница, но заменяется только определенный div.
У тебя твой див полностью замещается или остаются хвосты?
Professor
Сообщения: 115
Зарегистрирован: 2010.11.25, 19:47
Контактная информация:

Re: CGridView и dialog

Сообщение Professor »

1) да, но вот так вот $("a").click(); почему то не работает, поэтому вопрос и задал. То есть работает, пока аяксом не заменим контент.

2) Вот код который заменяет внутренности при клике на категорию

Код: Выделить всё

   $(".category").click(function(){
        var url= "/products/admin/ShowListProducts/id/"+$(this).attr("id").replace("a_","");
        $.ajax({
            url:url,
            type:"post",
            success: function(data){
                $("#products_list_1").html(data);
            }
        });
        return false;
    });   

$("#products_list_1").html(data); вроде как полностью весь див изменяет.

3) because? так получается 1 запрос(то что нужно), но тогда параметр ajaxUrl не меняется, и получается что отображается только одна категория.
Аватара пользователя
Sampad
Сообщения: 71
Зарегистрирован: 2010.11.22, 23:43

Re: CGridView и dialog

Сообщение Sampad »

Сделай тестовый вариант и покажи.
Ответы ты видешь через консоль firebug-a?
maschingan
Сообщения: 75
Зарегистрирован: 2011.01.20, 23:52

Re: CGridView и dialog

Сообщение maschingan »

Так не пробовали?

Код: Выделить всё

$('a').live('click', function() { ... }) 
Professor
Сообщения: 115
Зарегистрирован: 2010.11.25, 19:47
Контактная информация:

Re: CGridView и dialog

Сообщение Professor »

В общем забил на Ajax.
Сделал проще:
1) Расширил jquery.yiigridview.js функцией (хотя на самом деле можно было и не расширять)

Код: Выделить всё

    
$.fn.yiiGridView.setUrl = function(id,url) {
        $.fn.yiiGridView.settings[id].url=url;
        $('#'+id+' > div.keys').attr('title',url);
    };
 

при обработке сделал так

Код: Выделить всё

    $(".category").click(function(){
        var category_id=$(this).attr("id").replace("a_","");
        
        $.fn.yiiGridView.setUrl('page-grid-recomend','/products/admin/ShowListProducts/id/'+category_id);        
        $.fn.yiiGridView.update('page-grid-recomend', {
            url: '/products/admin/ShowListProducts/id/'+category_id
        });
                 
        return false;
        }); 
Professor
Сообщения: 115
Зарегистрирован: 2010.11.25, 19:47
Контактная информация:

Re: CGridView и dialog

Сообщение Professor »

Код: Выделить всё

$('a').live('click', function() { ... })  
Спасибо, так работает.
Я думал это в Jquery уже по умолчанию включено было.
Ответить