2016-10-02 33 views
2

有人能告訴我爲什麼下面的代碼不工作?它應該在加載時在一個字段中設置日期,然後通過單擊該字段來更改日期。我在linux上使用rebol/view 2.7.8。實際上,我認爲這個代碼在我使用MS Windows的時候曾經工作過很多年,但由於某種原因,這種代碼在Linux下不是。在rebol2 vid應用程序中的請求日期

DRL

rebol [] 
    trace true 
    out: layout [ 
     style dater txt bold right [trans-date/date: copy (form now/date)] 48x24 
     dater "T-Date:" trans-date: field 80x24 (form now/date) feel [ 
      engage: func [face action event][ 
       if action = 'up [ 
        lv-dat: request-date/date/offset (now/date) 450x375 
        if lv-dat <> none [ 
         trans-date/text: form lv-dat 
         show trans-date 
        ] 
       ] 
      ] 
      show trans-date 
     ] 
    ] 
    view out 

回答

3

這裏是你的代碼的清理版本:

Rebol [] 

out: layout compose/deep [ 
    style dater txt bold right 48x24 
    dater "T-Date:" 
    trans-date: field 80x24 (form now/date) feel [ 
     engage: func [face action event][ 
      if action = 'up [ 
       lv-dat: request-date/date/offset (now/date) 450x375 
       if lv-dat [ 
        face/text: form lv-dat 
        show face 
       ] 
      ] 
     ] 
    ] 
] 
view out 

的主要問題是缺少compose/deep呼叫layout之前評估括號表達式被調用。然而,這種做法是不初始化臉性質的常用方法,你應該情願把初始化代碼的VID塊的do部分,像這樣:

Rebol [] 

out: layout [ 
    style dater txt bold right 48x24 
    dater "T-Date:" 
    trans-date: field 80x24 feel [ 
     engage: func [face action event][ 
      if action = 'up [ 
       lv-dat: request-date/date/offset now/date 450x375 
       if lv-dat [ 
        face/text: form lv-dat 
        show face 
       ] 
      ] 
     ] 
    ] 
    do [trans-date/text: form now/date] 
] 
view out 

希望這有助於。