Представление CakePHP включая другие представления

Проблема в том, что вы определили свою переменную subscriberValue в своем методе build. Вы используете setState вызовы, которые вызывают метод build, и при каждом отзыве build вы теряете значение subscriberValue. Я советую вам всегда использовать переменные, которые будут контролировать состояние вашего виджета в качестве членов класса.

class _SignUpState extends State<SignUp> {

  // HAS TO BE CLASS MEMBER AND IT'S GOOD AN INITIAL VALUE TOO..
  int subscriberValue =1; // asuming that  1 is default radio button option 

  @override
  Widget build(BuildContext context) {
    //... some codes ...
    //int subscriberValue; REMOVE THIS LINE. YOU'RE LOSING THE VALUE IN EVERY setState call

    //You can define this method outside from build too.
    void switchSubscriber(int value) {
      setState(() {
        subscriberValue = value;
      });
    }
}
12
задан Fernando Barrocal 18 September 2008 в 15:34
поделиться

5 ответов

Проверьте этот ссылка и более конкретно эти Элементы - часть той страницы руководства, должен сказать Вам все, что необходимо знать

18
ответ дан 2 December 2019 в 03:25
поделиться

В интересах наличия информации здесь в случае, если кто-то натыкается на это, важно отметить, что решение варьируется в зависимости от версии CakePHP.

Для CakePHP 1.1

$this->renderElement('display', array('flag' => 'value'));

в Вашем представлении, и затем в /app/views/elements/ можно сделать файл названным display.thtml, где $flag будет иметь значение того, что Вы передаете ему.

Для CakePHP 1.2

$this->element('display', array('flag' => 'value'));

в Вашем представлении, и затем в /app/views/elements/ можно сделать файл названным display.ctp, где $flag будет иметь значение того, что Вы передаете ему.

<час> В обеих версиях элемент будет иметь доступ ко всем данным, представление имеет доступ к + любые значения, которые Вы передаете ему. Кроме того, как кто-то указал, requestAction() также опция, но она может взять тяжелый сбор в производительности, если обошедшийся без с помощью кэша, так как она должна пройти все шаги, нормальное действие было бы.
9
ответ дан 2 December 2019 в 03:25
поделиться

В Вашем контроллере (в этом примере контроллер сообщений).

function something() {
    return $this->Post->find('all');
}

В Вашем каталоге элементов (приложение/представления/элемент) создают файл, названный posts.ctp.

В posts.ctp:

$posts = $this->requestAction('posts/something'); 
foreach($posts as $post): 
    echo $post['Post']['title']; 
endforeach; 

Затем в Вашем представлении:

<?php echo $this->element('posts'); ?>

Это главным образом взято из книги CakePHP здесь: Создание Допускающих повторное использование Элементов с requestAction

Я действительно полагаю, что использование requestAction является довольно дорогим, таким образом, Вы захотите изучить кэширование.

7
ответ дан 2 December 2019 в 03:25
поделиться

Элементы работают, если Вы хотите, чтобы у них был доступ к тем же данным, к которым представление вызова имеет доступ.

, Если Вы хотите, чтобы Ваше встроенное представление имело доступ к своему собственному набору данных, Вы могли бы хотеть использовать что-то как requestAction() . Это позволяет Вам встраивать законченное представление, которое иначе было бы автономно.

1
ответ дан 2 December 2019 в 03:25
поделиться

я хочу использовать те "маленькие представления" для нескольких других целей, таким образом, Это должно быть похожим на компонент пирога для повторного использования.

Это сделано с "Помощниками", как описанный здесь . Но я не уверен, что это действительно, что Вы хотите." Элементы " предложение кажется корректным также. Это в большой степени зависит того, что Вы пытаетесь выполнить. Мои два цента...

0
ответ дан 2 December 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: