Страница 1 из 1

GridView TypeError 'selectionColumn'

Добавлено: 2017.09.08, 05:57
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
В форуме нашел несколько тем, где советуют проверить версию. У меня стоит последняя версия. Подскажите пожалуйста, как решить эту проблему или в каком направлений искать ответы???

Re: GridView TypeError 'selectionColumn'

Добавлено: 2017.09.08, 11:31
Dominus
А как вы публикуете JS?

Re: GridView TypeError 'selectionColumn'

Добавлено: 2017.09.08, 12:30
zhanbolat18
Что вы имеете ввиду, под публикуете???

Re: GridView TypeError 'selectionColumn'

Добавлено: 2017.09.08, 12:32
zhanbolat18
Если в консоле бразера вызвать

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

 $("#grid").yiiGridView("getSelectedRows") 
ТО все нормально показывает, когда вызываешь через JS код, выкидывает ошибку.

Re: GridView TypeError 'selectionColumn'

Добавлено: 2017.09.08, 12:35
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"});

Re: GridView TypeError 'selectionColumn'

Добавлено: 2017.09.08, 12:41
Dominus
Под моим вопросом, имелось ввиду предположение, что вы написали свой js и он вызывает ошибку.

Re: GridView TypeError 'selectionColumn'

Добавлено: 2017.09.08, 12:49
Dominus
Регистрировать можно как в head, так и в begin, так и в end.
например:

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

$this->registerJs($script, yii\web\View::POS_BEGIN);

Re: GridView TypeError 'selectionColumn'

Добавлено: 2017.09.10, 11:14
zhanbolat18
Я регистрирую js файл после gridView, и в depend указываю gridViewAsset.

Re: GridView TypeError 'selectionColumn'

Добавлено: 2017.09.11, 12:29
zhanbolat18
Никто не знает, ни у кого не было такой проблемы????

Re: GridView TypeError 'selectionColumn'

Добавлено: 2017.09.11, 12:33
Dominus
А какую задачу у вас должен решать ваш js

Re: GridView TypeError 'selectionColumn'

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

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

 $('тут батон').printReport() 
и все работало. Ну, если что, объект передавать при инициализаций, или дата атрибуты. Это все реализовано.
Сейчас по классу получаю все чекбоксы, и все работает, но хотелось бы использовать встроенные элементы фреймворка.

Re: GridView TypeError 'selectionColumn'

Добавлено: 2017.12.15, 14:05
malariuz
У меня точно такая же проблема!
Кто-нибудь решил данную проблему и хочет ли поделиться решением?