海边展示:和onAnswer:为什么所有东西都包含在一个额外的WAAnswerHandler相比同等的电话:?

时间:2017-03-07 17:49:10

标签: pharo seaside

我无法理解为什么这两段代码的行为不同。如果用户分别点击“保存”或“后退”按钮,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 个答案:

没有答案