2016-10-04 6 views
0

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

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

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

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

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

Заранее благодарен

+2

То, что вы пытаетесь сделать, это нарушение шаблона MVC, используемого Yii 2. Модель не должна генерировать части View, и поэтому нет простого способа добраться до метода 'registerJs()' оттуда. – Bizley

+0

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

+0

В этом случае, пожалуйста, добавьте свой комментарий к вопросу для уточнения. Проверьте http://www.yiiframework.com/doc-2.0/guide-input-validation.html#using-client-side-validation для получения дополнительной информации о добавлении проверки на стороне клиента в правила модели. – Bizley

ответ

1

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

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

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

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

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

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

0

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

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