gpt4 book ai didi

ruby - 如何为 Ruby Shoes 实现模糊事件

转载 作者:数据小太阳 更新时间:2023-10-29 07:18:40 24 4
gpt4 key购买 nike

我正在试验 Ruby Shoes。我希望控件在您给予它们焦点时变得可编辑,并在它们失去焦点时再次变成文本。到目前为止,我有以下...

class NameBox < Shoes::Widget
def initialize(model, opts = {})
@model = model
@para = para(value)
self.click{
edit
}
self.keypress{|key|
display if key==:enter
}
end

def display
@ed && @ed.hide
@para.show
@para.text = value
end

def edit
@ed ||= edit_line(value) {|e|
@model.rename(e.text)
}
@para.hide
@ed.text = value
@ed.show
end

def value
@model.name
end
end

被使用

class Model
attr_reader :name
def initialize(name)
@name = name
end
def rename(new_name)
@name = new_name
end
end

Shoes.app do
@variable = Model.new("1 2 3")
stack do
10.times{ name_box(@variable) }
end
end

此实现意味着如果您单击多个控件,它们都将成为编辑框。

我所希望的是一个模糊事件,它可以让我将控件改回“显示”。这不存在,所以..您将如何实现它?

假设我将编写更多控件,并且它们都必须遵守“一个集中控件”这一规则

** 对于 Bonus Points 解释为什么我不能放:

@ed ||= edit_line(value) {|e|
@model.rename(e.text)
}
@ed.hide()

在初始化和获取@ed 时隐藏。

最佳答案

这个怎么样?

class NameBox < Shoes::Widget
def initialize(model, opts = {})
@model = model
@para = para(value)
self.click{
edit
}
end

def display
@ed && @ed.hide
@para.show
@para.text = value
end

def edit
@ed ||= edit_box(value, height: 30) {|e|
e.text[-1] == "\n" ? display : @model.rename(e.text)
}
@para.hide
@ed.text = value
@ed.show
end

def value
@model.name
end
end

class Model
attr_reader :name
def initialize(name)
@name = name
end
def rename(new_name)
@name = new_name
end
end

Shoes.app do
@variable = Model.new("1 2 3")
stack do
10.times{ name_box(@variable) }
end
end

关于ruby - 如何为 Ruby Shoes 实现模糊事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11523769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com