2015-02-16 2 views
1

Я хотел бы динамически добавить кнопку в макет представления, при этом актер вызывает это добавление, принадлежащее кнопке, которая уже является частью макета.Добавления динамической компоновки в Rebol3

Я начал с этим:

REBOL [title: "Dynamic Button Addition"] 
tilesize: 60x60 
curtile: 1 
stylize [ 
    p: button [ 
     facets: [init-size: tilesize max-size: tilesize] 
     actors: [ 
      on-action: [ 
       ++ curtile 
       append tiles compose [ p (to-string curtile) ] 
       print ? tiles/options/content     
       v/redraw 
      ] 
     ] 
    ] 
] 
v: [ 
    tiles: hgroup [ p "1" ] 
] 
view v 

... который не кажется, имеет значение tiles/options/content изменения с каждым щелчком.

я могу заставить его изменить, если сделать эти изменения:

   append tiledata compose [ p (to-string curtile) ] 

и

tiledata: [ p "1" ] 
v: [ 
    tiles: hgroup tiledata 

Однако, это не вызывает каких-либо изменений на экране. Если я заменяю последние четыре строки с этим:

v: view [ 
    tiles: hgroup tiledata 
] 

... так что v теперь вид, а не макет зрения, я получаю эту ошибку, когда я нажимаю:

** Script error: v has no value 
** Where: actor all foreach do-actor unless do-face if actor all foreach do-actor if do-event do-event if do-event either -apply- wake-up loop -apply- wait forever try do-events if view do either either either -apply- 
** Near: actor face :data 

Это делает для меня смысл, потому что v еще не определено, пока я не выйду из программы, IIUC.

Как, могу ли я внести изменения в v до того, как программа закончится, но после того, как она была передана в view?

ответ

1

Не очень хорошо, но работает, если заменить

   v/redraw 

с этими двумя линиями

   unview/all   
       view v 

И есть реальный динамический пример на how to update a layout that has already be viewed

Я упростит его

stylize [ 
    tbox: hpanel [ 
    actors: [ 
     on-make: [ 
      append face/options [ 
       content: [ 
       ] 
      ] 
      do-actor/style face 'on-make none 'hpanel 
     ] 
    ] 
    ] 
] 

view/across [ 
    button "button 1" 
    on-action [ 
     append-content test compose [ 
      button (join "button " 2 + length? test/gob) 
     ] 
    ] 
    test: tbox 
] 
Смежные вопросы