1
Red [needs: 'view]

num: ["1^/"]
k: num/1

view [
     size 600x600
     txt: text 30x50 k
     ar: area 300x400 "" focus on-change[
         txt/size: ar/size
         len: length? split face/text newline
         either (len - face/data) > 0 [
               append num append form (len + 1) newline
               face/data: len
         ][
               remove back tail num
               face/data: face/data - 1 
          ]
          txt/text: form num
     ]
     do [ar/data: 0]
]

这个 Red 程序包含一个“文本面”和一个“区域面”。文本面包含序列号的垂直列表。当区域面添加换行符时,序列号将根据行数增加。并且当区域面中的一条线被移除时,序列号也会减少。

这是使用非反应性方法。有没有一种被动的方法来做到这一点?

4

1 回答 1

0

我相信你我们正在寻找的react功能。在这篇博文中介绍了响应式框架,并且有一个非常相似的示例将使用示例转换on-change为其响应式版本。

无论如何,我最近阅读了很多关于 Red 的内容,并且正在寻找第一个练习;我的to-list实现可能会有所改进,但视图声明现在更紧凑:

Red [needs: 'view]

to-list: function [text][
    ; converts text area string to list of numbers separated by newlines
    txt: copy text
    append txt "dummy" ; handle empty lines
    len: length? split txt newline
    x: copy ""
    repeat i len [ append x mold i append x newline]
]

view [ 
    size 600x600 
    text 30x600 react [
        face/text: to-list text-area/text
    ]
    text-area: area 300x400 ""
]
于 2017-05-25T05:20:00.387 回答