1

我开始深入研究 Reef,但我偶然发现了一些我真的不知道如何解决的问题......

我有一个 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 有它自己优雅的方式来做这件事,但我在任何地方都找不到它……有人吗?:)

4

1 回答 1

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 请求。

于 2011-02-25T11:44:29.670 回答