unclead / yii2-multiple-input

Yii2 widget for handle multiple inputs for an attribute of model
https://unclead.github.io/yii2-multiple-input/
BSD 3-Clause "New" or "Revised" License
393 stars 127 forks source link

Bug fixed undefined data #370

Closed usmonovdoston closed 7 months ago

usmonovdoston commented 2 years ago

Fixed => Uncaught TypeError: Cannot read properties of undefined (reading 'settings')

mrmuminov commented 2 years ago

It's same error

unclead commented 2 years ago

@usmonovdoston can you share the code to reproduce the issue?

usmonovdoston commented 2 years ago

@usmonovdoston can you share the code to reproduce the issue?

echo MultipleInput::widget([
        'id' => 'items-multiple',
        'rendererClass' => ListRenderer::class,
        'name' => ItemGroup::getFormName(),
        'data' => $items,
        'columns' => [
            [
                'name' => 'id',
                'type' => 'hiddenInput',
            ],
            [
                'name' => 'type_id',
                'type' => kartik\select2\Select2::class,
                'options' => [
                    'data' => ArrayHelper::map($boyamaType, 'id', 'name'),
                    'options' => [
                        'placeholder' => Yii::t('app', 'Type'),
                        'class' => 'type_select',
                    ],
                    'pluginOptions' => [
                        'allowClear' => true,
                    ],
                ]
            ],
            [
                'name' => 'recipe_items',
                'type' => MultipleInput::class,
                'options' => function($model)use($templateFormulaList){
                    return [
                        'name' => RecipeItems::getFormName(),
                        'sortable' => true,
                        'data' => $model['items'],
                        'columns' => [
                            [
                                'title' => Yii::t('app', "Item weight"),
                                'name' => 'amount',
                                'options' => [
                                    'class' => 'form-control text-right',
                                    'tabindex' => 1,
                                    'type' => 'number',
                                    'step' => "0.001",
                                    'onchange' => "calculateRow($(this));",
                                    'required' => true,
                                ],
                                'headerOptions' => [
                                    'style' => 'width: 100px;'
                                ],
                            ],
                            [
                                'title' => Yii::t('app', "Tartib raqami"),
                                'name' => 'group',
                                'options' => [
                                    'class' => 'form-control text-right',
                                    'tabindex' => 2,
                                    'type' => 'number',
                                    'step' => "1",
                                    'min' => "1",
                                    'required' => true,
                                ],
                                'headerOptions' => [
                                    'style' => 'width: 40px;'
                                ],
                            ],
                            [
                                'title' => Yii::t('app', "Formula"),
                                'name' => 'template_formula_id',
                                'type' => 'dropDownList',
                                'headerOptions' => [
                                    'style' => 'width: 35px;'
                                ],
                                'items' => ArrayHelper::map($templateFormulaList, 'id', 'name'),
                                'options' => [
                                    'tabindex' => 3,
                                    'onchange' => "calculateRow($(this));",
                                    'required' => true,
                                ]
                            ],
                            [
                                'title' => Yii::t('app', "Wh Items"),
                                'name' => 'item_id',
                                'type' => kartik\select2\Select2::class,
                                'options' => [
                                    'data' => WhItems::getList(),
                                    'options' => [
                                        'tabindex' => 4,
                                        'onchange' => "calculateRow($(this));",
                                        'required' => true,
                                        'placeholder' => Yii::t('app', 'Select ...'),
                                    ]
                                ]
                            ],
                            [
                                'title' => Yii::t('app', "Kg"),
                                'name' => 'kg',
                                'options' => [
                                    'class' => 'form-control text-right',
                                    'type' => 'number',
                                    'step' => '0.001',
                                ],
                                'headerOptions' => [
                                    'style' => 'width: 100px;'
                                ],
                            ],
                            [
                                'title' => Yii::t('app', "G"),
                                'name' => 'g',
                                'options' => [
                                    'class' => 'form-control text-right',
                                    'type' => 'number',
                                    'step' => '0.001',
                                ],
                                'headerOptions' => [
                                    'style' => 'width: 100px;'
                                ],
                            ],
                            [
                                'title' => Yii::t('app', "Mg"),
                                'name' => 'mg',
                                'options' => [
                                    'class' => 'form-control text-right',
                                    'type' => 'number',
                                    'step' => '0.001',
                                ],
                                'headerOptions' => [
                                    'style' => 'width: 100px;'
                                ],
                            ],
                            [
                                'title' => Yii::t('app', "Image"),
                                'name' => 'image',
                                'options' => [
                                    'rows' => 4,
                                ],
                                'columnOptions' => function($m) use ($model) {
                                   return [
                                        'class' => 'item-memo',
                                        'data-image' => $model['items'][0]['image_path'],
                                        'width' => '200px',
                                        'rowspan' => 0,
                                    ];
                                },
                            ],
                        ],
                    ];
                }
            ],
        ]
    ])
usmonovdoston commented 2 years ago

jquery.multipleInput.min.js не имеет ошибки, jquery.multipleInput.js имеет ошибку

unclead commented 2 years ago

По идее такого в принципе не должно быть, что после инициализации у нужного элемента нет мета-данных. Поэтому необходимо понять причину, а не скрывать проблему костылем.

Если поменять rendererClass на TableRenderer ошибка останется?

aman1792 commented 2 years ago

+1 Пробовал внести правку из первого комментария, не решает проблему полноценно.

@unclead Удалось повторить проблему ? Или нужна дополнительная информация ?

Проблема актуальна для версии 2.27.0. Откатился до версии 2.26.2 работает стабильно.

Если поменять rendererClass на TableRenderer ошибка останется?

Да.

UPD: file_333

Первая ошибка возникает когда я нажимаю добавить новую строку. Вторая ошибка возникает когда в новой строке есть multiple input и в нём нажимаю добавить новую строку.

unclead commented 7 months ago

closed the PR - original issue was fixed in e8074f943dfa36ff5a09af4e85cc2a34d4f24ff3