Приморское шоу: и 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, только они не эквивалентны.