这可能是一个非常简单的问题,但我已经搜索了很长时间,还没有找到任何有效的答案。。。
我试着用ruby开发一个Shoes应用程序,得到一个名字列表并保存到一个文件中我想显示已经引入的列表,当一个新名称进入列表时,显示的列表将被更新另外,我想将一个delete按钮关联到列表的每个元素,以便用户可以在需要时删除该名称。
在所有这些之后,我唯一能得到的是你添加一个名字并将其保存到列表中的部分,但是添加第二个堆栈时,使用一个delete按钮添加一个包含所有名字的列表…没那么幸运。这就是我的代码的样子,函数addName和saveFile不在这里,但它们只处理列表此外,一些全局变量和常量定义未显示:
Shoes.app(title: "My Higgs field!",
width: APPW, height: APPH, resizable: false) {
stack{
flow{
@edit = edit_line
@enter = button "Add"
@enter.click do
info "Enter to add #{@edit.text}"
addName(@edit.text)
end
}
@save_file = button "Guardar ficheiro"
@save_file.click do
saveFile
end
}
stack do
# Show a list with all the names inserted
$names.each do |name|
flow{
@line = para name
info "Putting line #{@line}"
@delete = button "Apagar"
@delete.click do
deleteName name
end
}
end
end
}
任何关于这方面的投入都是非常好的!
谢谢!
最佳答案
一个鞋子问题好久没有回答了那不可能。
这是一个完全可行的版本,我随意地重新组织了一切,并使用了我最喜欢的鞋子颜色:绿色
require 'green_shoes'
Shoes.app(title: "My Higgs field!", width: 200, height: 200, resizable: false) do
@names, @list = [], nil
def update
@list.clear()
@names.each do |name|
@list.append do
flow do
para link('del'){del(name); update}, ' ', name
end
end
end
end
def add name
@names << name
@names = @names.uniq.sort
update
end
def del name
@names.delete(name)
update
end
stack do
flow do
@edit = edit_line(width: 110, height: 23)
keypress do|k|
if k == "\n"
add(@edit.text)
end
end
button "Add" do
add(@edit.text)
end
button "Save file" do
File.open("names.txt", "w+") { |file| file.write(@names.join("\n")) }
alert("names.txt is saved")
end
end
@list = flow do
@names.each do |p|
para p, :size => 10
end
end
end
end