Как использовать javascript в классе модели Yii2?

В пользовательской функции проверки в моем классе модели. Мне нужно использовать код javascript. для этого я использовал функцию registerJs, но получаю сообщение об ошибке: - Вызов неопределенной функции registerJs()

Я также пытался вызвать его, включив класс View, т.е. View::registerJs(), но он также дает ошибку, называемую

Non-static method yii\web\View::registerJs() should not be called statically, assuming $this from incompatible context

Как я могу использовать Javascript в классе модели Yii2.

Изменить: я создал пользовательскую функцию для проверки номера мобильного телефона и вызываю эту функцию из раздела правил модели. Теперь я хочу использовать код javascript в этой функции. есть ли другой способ добиться этого?

заранее спасибо


person    schedule 04.10.2016    source источник
comment
То, что вы пытаетесь сделать, нарушает шаблон MVC, используемый Yii 2. Модель не должна генерировать части представления, и поэтому нет простого способа добраться до метода registerJs() оттуда.   -  person Bizley    schedule 04.10.2016
comment
@Бизли. Я создал пользовательскую функцию для проверки номера мобильного телефона и вызываю эту функцию из раздела правил модели. Теперь я хочу использовать код javascript в этой функции. есть ли другой способ добиться этого?   -  person Vinit Singh    schedule 04.10.2016
comment
В этом случае, пожалуйста, добавьте свой комментарий к вопросу для уточнения. Проверьте yiiframework.com/doc-2.0 / для получения дополнительных сведений о добавлении проверки на стороне клиента в правила модели.   -  person Bizley    schedule 04.10.2016
comment
В тот момент, когда вы слышите, как говорите javascript в модели, вы должны понимать, что делаете это неправильно.   -  person walther    schedule 04.10.2016


Ответы (2)


Этот метод не является статическим. Если вы откроете view.php фреймворка, вы сможете проверить реализацию.

   public function registerJs($js, $position = self::POS_READY, $key = null){..
   }

В исключении четко упоминается, что should not be called statically потому что оно не объявлено статическим.

Я видел несколько реализаций, которые вызывают этот метод как:

$view->registerJs($js, $view::POS_END);

В основном загрузка определенного JS-файла в одну из функций.

person Danyal Sandeelo    schedule 04.10.2016

Не рекомендуется использовать Javascript с моделью. Если вы пойдете по этому пути, то, вероятно, через некоторое время вы обнаружите, что столкнулись с большими проблемами с архитектурой приложения.

Лучший способ — вызвать модель внутри контроллера, а затем взаимодействовать с контроллером через код Javascript.

person Andrzej Bernat    schedule 04.10.2016