用鞋子刷新红宝石叠

时间:2014-04-21 20:20:29

标签: ruby user-interface shoes

这可能是一个非常简单的问题,但我一直在寻找它并且还没有找到任何有效的答案......

我尝试使用ruby做一个鞋子应用程序来获取名称列表并将其保存在文件中。我想显示已经引入的列表,并且当新名称进入列表时,显示的列表将被更新。此外,我想将删除按钮与列表中的每个元素相关联,以便用户可以根据需要删除该名称。

毕竟,我唯一能得到的就是你添加一个名字的部分,它被保存到一个列表中,但是在第二个堆栈中添加了一个带有删除按钮的所有名称的列表...不是这样幸运。这就是我的代码的样子,addName和saveFile函数不在这里,但它们只对列表做了一些工作。此外,未显示某些全局变量和constat定义:

 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
 }

对此的任何意见都非常好!

非常感谢!

1 个答案:

答案 0 :(得分:0)

鞋问题这么久没有回答!那不可能。 这是一个完全正常工作的版本,我冒昧地重新组织一切,并使用我最喜欢的鞋子颜色:绿色

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