为什么我在Rebol / Red中出现显示窗口错误?

时间:2017-12-18 17:27:04

标签: rebol red

当我点击按钮刷新时,我收到错误

v: [field1 "to refresh" field2 "to refresh" 
button "refresh" [show v]]
view v

如何刷新v?

更新:我没有错误,但没有刷新:

    test: [
      ["a1" "b1"]
      ["a2" "b2"]  
    ]

    i: 1
    v: layout compose [
      field data test/:i/1 field data test/:i/2 button "refresh" [i: i + 1 show v]
    ]
    view v

2 个答案:

答案 0 :(得分:1)

显示需要一张脸,而不是一块。 你可能想要的东西

  v: layout [
     f1: field "to refresh" 
     f2: field "to refresh" 
     button "refresh" [f1/text: f2/text show v ]
  ]

要查看更改,您应在第二个输入字段中键入内容,然后再单击按钮。

要使用某些(有用的)使用您的更新,您可以使用

i: 1
sw: true
v: layout compose [
    f1: field data test/:i/1 
    f2: field data test/:i/2 
    button "refresh" [
        i: pick [1 2] sw: not sw
        f1/text: test/:i/1
        f2/text: test/:i/2
        show v
    ]
]

show 不会再次加载面部定义块,但red-gui-system docs

“红色/视图会在其属性发生变化时实时更新面部和图形对象。这是默认行为,但是当需要完全控制屏幕更新时,可以关闭它。这可以通过以下方式实现:< / p>

system/view/auto-sync?: off

当关闭自动同步时,您需要在面上使用show function来更新屏幕上的图形对象。“

我猜你可以通过销毁旧的face对象并使用规范块构建一个新的东西来获得类似于你的意图。

 test: [
  ["a1" "b1"]
  ["a2" "b2"]  
]
i: 1
sw: true

vvw: layout v:  [
  field data test/:i/1 
  field data test/:i/2 
  button "refresh" [
      i: pick [1 2] sw: not sw
      unview vvw
      view v
  ]
]
view vvw

答案 1 :(得分:0)

不确定您的意思&#34;刷新&#34;,但Red的被动,您不需要明确告诉它更新。

如果您只想更新文本数据(增加其值) - 这是一个简短的工作示例:

view [f: field "42" button "increment" [f/data: f/data + 1]]

也就是说,f已分配给刚刚创建的field。按下按钮 - 它通过访问其data成员来接收新值。