Приморское шоу: и onAnswer: и почему все обернуто в один дополнительный WAAnswerHandler по сравнению с эквивалентным вызовом:?

Мне трудно понять, почему эти два фрагмента кода ведут себя по-разному. ClientView имеет [ self answer: true ] или же [ self answer: false ] если пользователь нажимает кнопки "Сохранить" или "Назад" соответственно.

html anchor
    callback: [ 
                ( self call: ( ClientView new client: Client new ) )
                    ifTrue: [ self inform: 'Client added' ]
                    ifFalse: [ self inform: 'Client not added' ] ];
    with: 'Add a contact'.

Первый работает хорошо, производя:

WADelegation > WAAnswerHandler > ClientView

Но это проблема:

html anchor
    callback: [ 
                view := ClientView new client: Client new.
                view
                    onAnswer: [ :answer | 
                        answer
                            ifTrue: [ self inform: 'Client added' ]
                            ifFalse: [ self inform: 'Client not added' ] ].
                self show: view ];
    with: 'Add a contact'.

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

WADelegation > WAAnswerHandler > WAAnswerHandler > ClientView

Нажатие "Сохранить" или "Назад" и "ОК" в любой из сведений никогда не возобновляет вызов исходного компонента, а просто продолжает отображать ClientView снова и снова.

Обратите внимание на использование ниже show: и предопределенный onAnswer: block на представлении, в то время как вышеупомянутый использует call:

Последний тест работает с:

html anchor
    callback: [ view := ClientView new client: Client new.
        self
            show: view
            onAnswer: [ :answer | 
                answer
                    ifTrue: [ self inform: 'Client added' ]
                    ifFalse: [ self inform: 'Client not added' ] ] ];
    with: 'Add a contact'.

или эквивалент

html anchor
        callback: [ self
                show: (ClientView new client: Client new)
                onAnswer: [ :answer | 
                    answer
                        ifTrue: [ self inform: 'Client added' ]
                        ifFalse: [ self inform: 'Client not added' ] ] ];
        with: 'Add a contact'.

NB. По сути, это последние два примера кода на этой странице http://book.seaside.st/book/components/calling/show-answer, только они не эквивалентны.

0 ответов

Другие вопросы по тегам