2011-09-02 3 views
0

Мне нужна помощь с Yii.Вызов действия контроллера из события onChange

Как я могу вызвать действие Controller из текстового поля onChange?

Обновление: У меня есть форма, построенная с использованием CActiveForm. Эта форма имеет много текстовых полей. Когда я изменяю любое значение, другое должно быть обновлено, вычисляя формулу, используя новое введенное значение. Так что я пытаюсь сделать, это следующее:

<tr> 
     <td>Average KW Demand:</td> 
     <td><?php echo $form->textField($lfac_model, 'kw_demand', array('size'=>5));?></td> 
    </tr> 
    <tr> 
     <td>Estimated Load Factor:</td> 
     <td><?php echo $form->textField($lfac_model, 'loadf', array('size'=> 5));?>/td> 
    </tr> 

Когда пользователь изменяет «Оценочная фактор нагрузки», «Средняя КВт Demand» значение должно быть обновлено с результатом формулы. То, что я понял, это хранить формулы в таблице, затем перейти к действию Controller, получить конкретную формулу, вычислить новое значение и отправить его обратно в представление. Я не уверен, что это лучшая идея для реализации этого.

ответ

1

Вы должны использовать виджет CJuiAutoComplete Yii, чтобы делать то, что хотите. Существует базовая демонстрация here, и есть другие примеры в документах Yii. Главное, что вам нужно убедиться в том, что вы также указываете опцию «appendTo», см. Раздел jQuery autocomplete docs, который использует этот виджет.

Таким образом, вы должны настроить виджет для поля «Предполагаемый коэффициент нагрузки» и указать поле «Среднее значение KW Demand» с помощью атрибута appendTo.

И если вы не хотите автозаполнения вещи и просто хотите, чтобы заменить значение, вы можете использовать htmlOptions атрибут «Аякса» на своем значении «loadf» как так:

'ajax' => array(
    'type'=>'POST', //request type 
    'url'=>$this->createUrl('site/ajaxAction'), //url to call 
    'success'=>'function(data) { $(\'#kw_demand\').val(data) }',// function to call onsuccess 
      // "data" is returned data and function can be regular js or jQuery 
) 

см: CHtml#ajax-detail и jQuery.ajax. В этом случае вы, скорее всего, вернуть обычный текст так, ваша функция контроллера будет выглядеть так: onChange событие

public function actionAjaxAction() { 
    [your data functions...] 
    echo $kw_demand_string; 
    Yii::app()->end() 
} 
+0

Это решается! Спасибо. Именно то, что вы сказали. Спасибо друг! – ivantxo

1

текстового поля является событий JavaScript. Он живет в другом аспекте вашего приложения.

Чтобы вызвать действие на вашем контроллере, вам нужно будет использовать AJAX (или асинхронный вызов). Идея здесь состоит в том, чтобы поместить некоторые данные на маршрут, который обрабатывает это действие.

Например:

  • Скажем у вас есть этот маршрут/страница: /product/details =>ProductController::actionDetails()
  • Вы хотите иметь обновление поиск поля с автозаполнения опций.
  • Вы установили javascript на событие onChange вашего поля поиска, чтобы вызвать метод, который выводит значение поля (в настоящее время введенный текст) на действие на вашем контроллере.
  • Вы создали этот маршрут/страница /product/ajaxautocomplete =>ProductController:actionAjaxAutocomplete()
  • Это второе действие происходит в публикуемую значения из вашего яваскрипта асинхронным HTTP запроса (AJAX вызовов) и возвращает список возможных результатов на основе базы данных.
  • Ваш javascript затем принимает возврат (обычно в XML/JSON, иногда HTML) и применяет значения к dom на стороне клиента.

Вы можете использовать JQuery для достижения этой цели легко:

$.ajax({ 
    type: 'POST', 
    url: '/product/ajaxautocomplete', 
    data: { 'searchPhrase' => searchBox.value }, 
    success: function(data, textStatus, jqXHR) { applyValues(data); }, 
    dataType: 'json' 
}); 
Смежные вопросы