Один из моих скриптов работает в связке с knockout.js и yii.activeForm.js: элемент добавляется в коллекцию, затем вызывается jQuery('#orderInput').yiiActiveForm('add', {...}) для связывания с формой. Данный скрипт расположен выше автоматически сгенерированного кода, инициализирующего форму элементами ввода
Код: Выделить всё
jQuery('#orderInput').yiiActiveForm([{"id":"order-name","name":"name","container":".field-order-name","input":"#order-name","error":".help-block.help-block-error","validate":function (attribute, value, messages, deferred, $form) {yii.validation.string(value, messages, {"message":"Максимум 250 символов","max":250,"tooLong":"Наименование товара should contain at most 250 characters.","skipOnEmpty":1});yii.validation.required(value, messages, {"message":"Не указано наименование товара"});}}
Код: Выделить всё
add: function (attribute) {
var $form = $(this);
attribute = $.extend({value: getValue($form, attribute)}, attributeDefaults, attribute);
$form.data('yiiActiveForm').attributes.push(attribute);
watchAttribute($form, attribute);
В файле yii.activeForm.js фрагмент кода:
Код: Выделить всё
$.fn.yiiActiveForm = function (method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.yiiActiveForm');
return false;
}
};
1) Самому вызывать init перед yiiActiveForm('add', {...})?
2) Переместить скрипт с кодом yiiActiveForm('add', {...}) в самый низ непосредственно перед </body>, но после автоматические сгенерированного JS инициализации формы?
3) Или со стороны разработчиков Yii2 добавить проверку на то, был ли ранее инициализирован объект перед вызовом return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); и если не инициализирован, то сделать это?