我在wbraganca动态表单中使用了一些插件(yii \ widgets \ MaskedInput和kartik \ select2 \ Select2)。 我注意到这两个插件只在第一个元素上起作用。 请指教。谢谢你。 我的代码就像这样
<?= $form->field($detail, "[{$i}]item_id")->widget(Select2::classname(), [
'data' => ArrayHelper::map(Item::find()->all(), 'id', 'name'),
'language' => 'en',
'options' => ['placeholder' => 'Select Items ...', 'onchange' => 'getItemPrice($(this))'],
'pluginOptions' => [
'allowClear' => true
],
]) ?>
<?= $form->field($detail, "[{$i}]qty")->widget(\yii\widgets\MaskedInput::className(),
[
'clientOptions' => [
'alias' => 'numeric',
'groupSeparator' => ',',
'digits' => 0,
'autoGroup' => true,
'removeMaskOnSubmit' => true,
'rightAlign' => false,
],
'options' => [
'class' => 'form-control',
'onchange' => 'calculateSubtotal($(this))',
]
]) ?>
答案 0 :(得分:3)
最后,我找到了这个问题的答案。它实际上是在github.com/wbraganca中回答的。 我在这做什么: 1.对于kartik / select2,修改源代码 yii2-dynamic-form.js (记得删除web / assets文件以使其生效)
// "kartik-v/yii2-widget-select2"
var $hasSelect2 = $(widgetOptionsRoot.widgetItem).find('[data-krajee-select2]');
if ($hasSelect2.length > 0) {
$hasSelect2.each(function() {
var id = $(this).attr('id');
var configSelect2 = eval($(this).attr('data-krajee-select2'));
// $(this).select2('destroy');
if ($(this).data('select2')) {
$(this).select2('destroy');
}
var configDepdrop = $(this).data('depdrop');
if (configDepdrop) {
configDepdrop = $.extend(true, {}, configDepdrop);
$(this).removeData().off();
$(this).unbind();
_restoreKrajeeDepdrop($(this));
}
var s2LoadingFunc = typeof initSelect2Loading != 'undefined' ? initSelect2Loading : initS2Loading;
var s2OpenFunc = typeof initSelect2DropStyle != 'undefined' ? initSelect2Loading : initS2Loading;
$.when($('#' + id).select2(configSelect2)).done(s2LoadingFunc(id, '.select2-container--krajee'));
var kvClose = 'kv_close_' + id.replace(/\-/g, '_');
$('#' + id).on('select2:opening', function(ev) {
s2OpenFunc(id, kvClose, ev);
});
$('#' + id).on('select2:unselect', function() {
window[kvClose] = true;
});
if (configDepdrop) {
var loadingText = (configDepdrop.loadingText) ? configDepdrop.loadingText : 'Loading ...';
initDepdropS2(id, loadingText);
}
});
}
var _restoreSpecialJs = function(widgetOptions) {
var widgetOptionsRoot = _getWidgetOptionsRoot(widgetOptions);
// "jquery.inputmask"
var $hasInputmask = $(widgetOptionsRoot.widgetItem).find('[data-plugin-inputmask]');
if ($hasInputmask.length > 0) {
$hasInputmask.each(function() {
$(this).inputmask('remove');
$(this).inputmask(eval($(this).attr('data-plugin-inputmask')));
});
}
然后将MaskedInput.php复制到您的文件夹项目(我的:models \ MaskedInput.php)并更改此代码
$view->registerJs("var {$this->_hashVar} = {$encOptions};", View::POS_READY);
到
$view->registerJs("var {$this->_hashVar} = {$encOptions};", View::POS_END);
请记住从编辑过的文件中使用MaskedInput。 谢谢。
答案 1 :(得分:0)
我想要在添加新元素(表单)时重新初始化小部件。请参阅下面的链接,这不是您想要的,但与您的情况相同。
答案 2 :(得分:0)
作曲家需要pceuropa / yii2-forms dev-master
答案 3 :(得分:0)
在阅读了wbraganca github中的一些问题之后,我决定从该回购中使用这个分支。
https://github.com/vivekmarakana/yii2-dynamicform
但是在某些情况下,widgetOptions
数组中的那个叉子仍然存在问题。通过在错误行中删除该索引([i]
)来手动修复它们。