开发者

Updating Reef parts on the fly

I'm starting to dig into Reef and I'm stumbling upon something I really don't know how to solve...

I have a RETextField and a REButton, and I want the text field's contents to get updated when the button is pressed, so here's what I'm trying:

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']).

This doesn't work, as I should tell the text field to get updated, so I tried:

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

But it didn't work either... also tried self canvas jQuery ajax script: etc. without luck.

I'm guessing Reef has its own elegant way of doing this, but I can't find it anywhere... someone? :)


When creating a Reef component, you need to take into account that just form and form widgets can be triggered. In your first example, it should work just if your component is child of REForm. Something like this:

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 ]]).

...should work correctly. Also, remember your Reef application needs to be registered using a special mechanism:

REApplication 
    registerAsApplication: 'name'
    root: MyRootComponent 

This registration adds all library dependences and decorates your application with a dispatcher for managing ajax requests.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜