2012-10-05 2 views
1

나는이 코드를 가지고 : 당신이 누군가가 다음 '뒤로'를 클릭 클릭하면, 지금REBOL 레이아웃이 지속되는 이유는 무엇입니까?

REBOL [Title: "Employee list"] 

screen1: does [ 

    emp-list: [ 
     "Amy" 1 
     "Bob" 2 
     "Carrie" 3 
    ] 

    gui-layout: [ text "click your name" ] 

    foreach [emp-name emp-id] emp-list [ 
     append gui-layout compose/deep [ 
     box (emp-name) [screen2 (emp-id)] 
     ] 
    ] 

    view layout gui-layout 
] 

screen2: func [emp-id] [ 

    choice-list: [ 
     "A" 11 
     "B" 22 
    ] 

    gui-layout: [ 
     box "<-- back to names" [screen1] 
     text reform ["clicked id " emp-id ", now choose below"] 
    ] 

    foreach [choice-name choice-id] choice-list [ 
     append gui-layout compose/deep [ 
     box (choice-name) [print [(emp-id) (choice-id)]] 
     ] 
    ] 

    view layout gui-layout 
] 

screen1 

를 메뉴는 성장한다. (그리고 다른 사람을 클릭하면 두 번째 메뉴도 커졌습니다.) 한 가지 해결 방법 (?)은 view layout gui-layout 앞에 clear emp-list을 입력하여 첫 번째 화면을 수정하지 못하도록하는 것입니다. 그러나, 내가 print emp-list에 있다면 나는 그것이 성장하고있는 것은 emp-list이 아니라는 것을 알 수 있습니다. 어떻게 이럴 수있어?

+0

에 추가하고 각 시리즈 전에 '사본을 넣어 clear gui-layout'을 사용하고 목록과 레이아웃을'has '(또는'screen2'를위한'function')을 사용하여 로컬로 만들지 만, 이들 중 어느 것도 새로운 lis를 그린 결과를 얻지 못합니다 각 시간마다. – Kev

답변

4

기능의 지속성 기능을 사용하고 있습니다.

당신이 원하는 것을 위해

persist: has [ a ] [ a: [] append a random 100 print a ] 


no-persist: has [ a ] [ a: copy [] append a random 100 print a ] 

를 참조하십시오, 나는 또한`시도했습니다 당신이

gui-layout: copy [ text "click your name" ] 

gui-layout: copy/deep [ 
     box "<-- back to names" [screen1] 
     text reform ["clicked id " emp-id ", now choose below"] 
    ] 
+0

Brilliant! 분명히 그 기능을 알지 못했습니다. 당신의 도움을 주셔서 감사합니다! – Kev

+0

VID 질문이 아닙니다 ... 음, 좀 더 자세히 읽었어야했습니다. :-피 – HostileFork