Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: When to define words

From: brett::codeconscious::com at: 10-Jul-2001 10:33

Hi Thorsten, Comments below
> layout2: layout [ H2 "second layout" > button "Sub" coal [sublayout/pane: sublayout-input show sublayout] > sublayout: box 300x300 coal > ] > > login: layout [ H2 "first layout" > label "Input: " myfield: field > button "go" [unview/all view layout2] > ] > > sublayout-input: layout [ H2 "Sublayout" > backcolor red > txt join "Input:" myfield/text > ]
When the Rebol interpreter has finished evaluating up to this point you will have created a layout with a TXT on it that has had it's /text already set - in fact to an empty string. What I mean is, myfield/text has been evaluated - and it will not be evaluated again.
> view login > > In this sample i didn't get the error, but the sublayout didn't show the
input as well. You need some code that sets the TXT but only after the input has been entered.
> Hope it comes clear what i was asking for.
I think so. So repeating myself you need something that will communicate the user inputted text to the other sublayout. One way would be to have one sublayout talk directly to the other. This might be fine in a one off small program, but in a bigger program it might be hard to understand what is happening. Another way is to create a common point of reference for the two sublayouts to access. Given that you user data is very likely to be used in other parts of the program all you need is a global word or an object to set. Like this ; Somewhere to store our data user-data: context [ user-input: none ] layout2: layout [ H2 "second layout" button "Sub" coal [ input-display/text: user-data/user-input sublayout/pane: sublayout-input show sublayout ] sublayout: box 300x300 coal ] login: layout [ H2 "first layout" label "Input: " myfield: field [ ; The user entered something - keep track of it user-data/user-input: myfield/text ] button "go" [unview/all view layout2] ] sublayout-input: layout [ H2 "Sublayout" backcolor red input-display: txt join "Input:" ] view login That solve's the problem but for this example there is a little more we can do. For this example, sublayout-input doesn't change once it has the correct input text set on it. So with that knowledge we could create it only when we need it. Like this: ; Somewhere to store our data user-data: context [ user-input: none ] ; A function to create the sublayout when needed displaysub-layout2: does [ sublayout-input: layout compose [ H2 "Sublayout" backcolor red txt join "Input:" (user-data/user-input) ] sublayout/pane: sublayout-input show sublayout ] layout2: layout [ H2 "second layout" button "Sub" coal [ displaysub-layout2 ] sublayout: box 300x300 coal ] login: layout [ H2 "first layout" label "Input: " myfield: field [ ; The user entered something - keep track of it user-data/user-input: myfield/text ] button "go" [unview/all view layout2] ] view login So this bit of code shows how VID code can be treated as data to be manipulated until you actually need it displayed. And to make things clearer I've moved complex code out of the button into a seperate function. HTH Brett.