2016-05-25 10 views
7

REBOL/View 2.7.8コアを使用して、次の例のように、さまざまなレイアウト項目に自動的に単語を割り当てることで、事前にビューレイアウトを準備したいと考えています。 代わり REBOLレイアウト:レイアウト単語を自動的に作成する方法 - 単語にはコンテキストがありませんか?

prepared-view: [across 
       cb1: check 
       label "Checkbox 1" 
       cb2: check 
       label "Checkbox 2" 
       cb3: check 
       label "Checkbox 3" 
       cb4: check 
       label "Checkbox 4" 
       ] 
    view layout prepared-view 

Iだろうのでcb5からcb1が自動的に作成される言葉、例えばのような

の:

prepared-view2: [ across ] 
    for i 1 4 1 [ 
     cbi: join "cb" i 
     cbi: join cbi ":" 
     cbi: join cbi " check" 
     append prepared-view2 to-block cbi 
     append prepared-view2 [ 
     label ] 
     append prepared-view2 to-string join "Checkbox " i 
     ] 
    view layout prepared-view2 

しかし、ブロック内difference prepared-view prepared-view2ショー差異が解析されていないながら(== []) 2番目のスクリプトはエラーにつながります。

** Script Error: cb1 word has no context 
    ** Where: forever 
    ** Near: new/var: bind to-word :var :var 

私は時間をかけて理由を理解しようとしましたが、何とか新しい単語を特定のコンテキストに結びつける必要があると思っていますが、まだ問題の解決策が見つかりませんでした。

何をする必要がありますか?

答えて

2
bind prepared-view2 'view 
view layout prepared-view2 

は、正しいバインディングを作成します。

そしてここでは、動的にレイアウト

>> l: [ across ] 
== [across] 
>> append l to-set-word 'check 
== [across check:] 
>> append l 'check 
== [across check: check] 
>> append l "test" 
== [across check: check "test"] 
>> view layout l 

を作成するために別の方法です。そして、あなたはあなたのレイアウトに追加するには、別の変数を作成するために、ループを使用することができます。

+0

ありがとうございました。 –

2

TO-BLOCKを使用して文字列をブロックに変換すると、「通常の」デフォルトのコンテキストへのバインディングを行わない低レベルの操作です。すべての単語が結合していないだろう。だから、

>> x: 10  
== 10 

>> code: to-block "print [x]" 
== [print [x]] 

>> do code 
** Script Error: print word has no context 
** Where: halt-view 
** Near: print [x] 

あなたが検索動作する実行時に生の文字列からコードをビルドしたい場合、1つのオプションは、LOADを使用することであり、それがデフォルトっぽい何かをするだろう、それはのために働くかもしれませんいくつかのコード(ローダがバインディングは、ソースから来たあなたが実行しているコードのために作られたかである)

>> x: 10 
== 10 

>> code: load "print [x]" 
== [print [x]] 

>> do code 
10 

それとも、明示的コンテキスト/オブジェクトに名前を付ける(または模範単語を経由してすることができますそのコンテキストにバインドされている)BINDを使用します。

+0

...私は単に 'prepared-view2をclobにブロックする'を 'prepared-view2 load cbi'を追加するように変更します...そうです! –

関連する問題