即时更新珊瑚礁部分

时间:2011-02-24 16:25:16

标签: smalltalk seaside

我开始深入挖掘珊瑚礁,我磕磕绊绊,我真的不知道如何解决......

我有一个RETextField和一个REButton,我希望按下按钮时文本字段的内容会更新,所以这就是我正在尝试的内容:

initializeContents
    self
        add:
            ((RETextField new)
                id: 'myTextField';
                on: #textFieldContents of: self).
    self
        add:
            ((REButton new)
                label: 'Try me!';
                callback: [ 
                    self triggerThenDo: [
                        textFieldContents := textFieldContents , ' and something else']).

这不起作用,因为我应该告诉文本字段更新,所以我尝试了:

initializeContents
    self
        add:
            ((RETextField new)
                id: 'myTextField';
                on: #textFieldContents of: self).
    self
        add:
            ((REButton new)
                label: 'Try me!';
                callback: [ 
                    self triggerThenDo: [
                        textFieldContents := textFieldContents , ' and something else'.
                        (self canvas jQuery: '#myTextField') 
                            load html: 
                               [ :h | h text: textFieldContents ] ] ])

但它也没有用......也没有运气就试过了self canvas jQuery ajax script: etc.

我猜Reef有自己优雅的方式来做这件事,但我找不到任何地方......某人? :)

1 个答案:

答案 0 :(得分:3)

创建Reef组件时,您需要考虑只能触发表单和表单小部件。在您的第一个示例中,它应该适用于您的组件是REForm的子组件。像这样:

REForm subclass: #MyForm
    instanceVariableNames: 'textFieldContents'
    classVariableNames: ''
    poolDictionaries: ''
    category: 'ReefSample1-View'.

textFieldContents
    ^textFieldContents

textFieldContents: aString
    textFieldContents := aString

initializeContents 
    self add: (RETextField new 
        on: #textFieldContents of: self).
    self add: (REButton new 
        label: 'Try me!';
        callback: [ self triggerThenDo: [ self inform: self textFieldContents ]]).

......应该正常工作。另外,请记住您的Reef应用程序需要使用特殊机制进行注册:

REApplication 
    registerAsApplication: 'name'
    root: MyRootComponent 

此注册添加了所有库依赖项,并使用调度程序装饰您的应用程序以管理ajax请求。