GridView TypeError 'selectionColumn'

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
zhanbolat18
Сообщения: 17
Зарегистрирован: 2017.09.07, 08:53

GridView TypeError 'selectionColumn'

Сообщение zhanbolat18 »

Доброго времени суток!
Появилась такая проблема. на странице GridView

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

<?php echo GridView::widget([
                'dataProvider' => $dataProvider,
                'emptyText' => '...',
                'showOnEmpty' => false,
                'tableOptions' => [
                    'class' => 'table'
                ],
                'layout' => '{items}<div class="datatable-footer">{summary}{pager}</div>',
                'options' => [
                    'id' => 'grid',
                    'class' => 'table-responsive',
                ],
                ...
Пишу JS

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

(function ( $ ) {
    $.fn.extend({
        reportPrint: function (options) {
            if (typeof $(this).yiiGridView === 'undefined') return false;
            var _default = {
                elem:'.checkbox-column',
                btn:'.report-print-btn',
                isActive: function (elem) {
                    return $(elem).yiiGridView('getSelectedRows').length > 0;
                },
                disable:function (elem) {
                    this.isActive(elem) ? $(this.btn).removeClass('disabled') : $(this.btn).addClass('disabled');
                }
            };
            var params = $.extend(_default,options);
            $(document).on('change',params.elem,function () {
                params.disable();
            });
            params.disable();
        return this;
    }});
}(jQuery));
Получаю ошибку

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

Uncaught TypeError: Cannot read property 'selectionColumn' of undefined
    at jQuery.fn.init.getSelectedRows (yii.gridView.js:203)
    at jQuery.fn.init.$.fn.yiiGridView (yii.gridView.js:15)
    at Object.isActive (gridView.report.print.js:9)
    at Object.disable (gridView.report.print.js:12)
    at jQuery.fn.init.reportPrint (gridView.report.print.js:19)
    at gridView.report.print.js:24
getSelectedRows @ yii.gridView.js:203
$.fn.yiiGridView @ yii.gridView.js:15
isActive @ gridView.report.print.js:9
disable @ gridView.report.print.js:12
reportPrint @ gridView.report.print.js:19
(anonymous) @ gridView.report.print.js:24
В форуме нашел несколько тем, где советуют проверить версию. У меня стоит последняя версия. Подскажите пожалуйста, как решить эту проблему или в каком направлений искать ответы???
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: GridView TypeError 'selectionColumn'

Сообщение Dominus »

А как вы публикуете JS?
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
zhanbolat18
Сообщения: 17
Зарегистрирован: 2017.09.07, 08:53

Re: GridView TypeError 'selectionColumn'

Сообщение zhanbolat18 »

Что вы имеете ввиду, под публикуете???
zhanbolat18
Сообщения: 17
Зарегистрирован: 2017.09.07, 08:53

Re: GridView TypeError 'selectionColumn'

Сообщение zhanbolat18 »

Если в консоле бразера вызвать

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

 $("#grid").yiiGridView("getSelectedRows") 
ТО все нормально показывает, когда вызываешь через JS код, выкидывает ошибку.
zhanbolat18
Сообщения: 17
Зарегистрирован: 2017.09.07, 08:53

Re: GridView TypeError 'selectionColumn'

Сообщение zhanbolat18 »

Сейчас уже переписал JS код. Убрал привязку к гриду, а сделал привязку к стороннему батону, но исключение не ушло.

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

"use strict";
(function ($) {
    var _elem = {};
    var _options = {};

    var getViewItem = function () {
        if (!('viewItem' in _options)) return false;
        return $(_options.viewItem);
    };

    var getSelectedItems = function () {
        try{
            return $(_options.viewItem).yiiGridView('getSelectedRows');
        } catch (e){
            return $(_options.checkboxItems + ":checked");
        }

    };

    var click = function (e) {
           ...
    };

    var _default = {
        checkboxItems:'.checkbox-column',
        requestMethod : 'post',
        key: 'form',
        isActive: function () {
            return getSelectedItems().length > 0;
        },
        disable:function () {
            this.isActive() ? $(_elem).removeClass('disabled') : $(_elem).addClass('disabled');
        }
    };

    $.fn.reportPrint = function (options) {
        _elem = $(this);
        _options = $.extend(_default,options,$(this).data());
        var viewItem = getViewItem();
        if (!viewItem){
            throw new Error('Selector for View item must be a set. Example: $(".btn-print").reportPrint(viewItem:"#grid"}) or add data attribute like data-view-item="#grid"');
        }
        if (typeof viewItem.yiiGridView === 'undefined') return false;
        $(document).on('change', _options.checkboxItems, _options.disable.bind(_options));
        $(document).on('click', this, click);
        _options.disable();
    }
}(jQuery));


$(".additional-button").reportPrint({url:"/print/orders"});
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: GridView TypeError 'selectionColumn'

Сообщение Dominus »

Под моим вопросом, имелось ввиду предположение, что вы написали свой js и он вызывает ошибку.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: GridView TypeError 'selectionColumn'

Сообщение Dominus »

Регистрировать можно как в head, так и в begin, так и в end.
например:

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

$this->registerJs($script, yii\web\View::POS_BEGIN);
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
zhanbolat18
Сообщения: 17
Зарегистрирован: 2017.09.07, 08:53

Re: GridView TypeError 'selectionColumn'

Сообщение zhanbolat18 »

Я регистрирую js файл после gridView, и в depend указываю gridViewAsset.
zhanbolat18
Сообщения: 17
Зарегистрирован: 2017.09.07, 08:53

Re: GridView TypeError 'selectionColumn'

Сообщение zhanbolat18 »

Никто не знает, ни у кого не было такой проблемы????
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: GridView TypeError 'selectionColumn'

Сообщение Dominus »

А какую задачу у вас должен решать ваш js
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
zhanbolat18
Сообщения: 17
Зарегистрирован: 2017.09.07, 08:53

Re: GridView TypeError 'selectionColumn'

Сообщение zhanbolat18 »

Ну, на странице есть чекбоксы и батон. Он должен следить, чтобы пока нет выделенных чекбоксов, батон disabled, как только хоть один выделяется, он его активирует. В тоже время, батон при клике, должен собрать все выделенные чекбоксы, и должен отправить пост запрос.
Хочется реализовать красиво, типа

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

 $('тут батон').printReport() 
и все работало. Ну, если что, объект передавать при инициализаций, или дата атрибуты. Это все реализовано.
Сейчас по классу получаю все чекбоксы, и все работает, но хотелось бы использовать встроенные элементы фреймворка.
Аватара пользователя
malariuz
Сообщения: 26
Зарегистрирован: 2016.05.12, 09:25

Re: GridView TypeError 'selectionColumn'

Сообщение malariuz »

У меня точно такая же проблема!
Кто-нибудь решил данную проблему и хочет ли поделиться решением?
Ответить