Обновление частей рифа на лету - PullRequest
1 голос
/ 24 февраля 2011

Я начинаю копаться в 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 есть собственный элегантный способ сделать это, но я не могунайти это где-нибудь ... кто-то?:)

1 Ответ

3 голосов
/ 25 февраля 2011

При создании компонента 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-запросами.

...