Ive два выпадающих списка один для страны и других для городов на моей странице. Когда я загружаю страницу, я устанавливаю страну в страну по умолчанию, загруженную из регистрации пользователя. Затем я загружаю города для этой страны.
Проблема в том, что теперь, когда я изменяю раскрывающийся список страны и обновляю страницу, выбранная вами страна выпадающего значения остается той же, которая изменилась, но города загружаются из страны по умолчанию.
Я получаю правильное значение в представлении от контроллера, но представление не устанавливает его правильно. Код на мой взгляд выглядит следующим образом
echo $this->Form->input('from_country_code', array( 'options'=>$countries, 'id'=>'from_country_code', 'label' => __('Country',true), 'selected'=>$selectedCountryCode ) );
Во-вторых, объясните мне, как я могу узнать, что страница обновлена, и сохранить измененные значения выпадающего списка и не выполнять весь код контроллера действия.
Любая помощь будет высоко оценен.
Обновлено – здесь его код контроллера
function add() { $currentUser = $this->Auth->user(); $countryMap = $this->requestAction('/countries/getList/'); $this->set('countries',$countryMap); $this->set('selectedCountryCode',$currentUser['City']['countriesCode']); $cityMap = $this->requestAction('/cities/getListByCountryCode/'.$currentUser['City']['countriesCode']); $this->set('cities',$cityMap); if(!empty($this->data)) { if($this->Request->saveAll($this->data)) { $this->Session->setFlash('The Request was successfully Posted'); $this->redirect(array('controller'=>'users','action'=>'requests')); } else { $this->Session->setFlash('The Request was not saved. Please try again'); } } }
Обратите внимание, что проблема связана с тем, что при обновлении страницы выбранное свойство выпадающего списка страны не устанавливается должным образом. Ive проверил значение от контроллера, что он пришел правильно, даже если я обновляю страницу.
Im устанавливает значение выбранной страны в этой переменной @selectedCountryCode.
Я не уверен, что понял. У вас есть два раскрывающихся списка на одной странице, и что вы хотите сделать, это обновить элементы второго в соответствии с выбранным элементом в первом? И поэтому пользователю нужно нажать кнопку обновления, чтобы обновить второй список?
Если это то, что вы имеете в виду, я думаю, что это совсем не дружелюбный пользователь и даже не стандартный способ навигации по Интернету. Кроме того, это абсолютно нормально, что все действие контроллера выполняется снова, когда вы нажимаете кнопку обновления. Фактически нажатие кнопки обновления означает «пожалуйста, снова выполните логику веб-страницы».
Если вам нужен более удобный для пользователя способ обновить второй раскрывающийся список, вам следует искать способ Javascript для этого. См. Например: http://nuts-and-bolts-of-cakephp.com/2010/03/10/use-cakephp-jquery-to-build-dynamic-selects/
Вы не должны использовать refresh для этого, что делает логику контроллера слишком сложной. Используйте javascript, чтобы изменить список городов в зависимости от списка стран. Вы можете использовать ajax для получения списка городов.