2014-04-21 101 views
2

這可能是一個很簡單的問題,但我一直在尋找它很長一段時間,並沒有發現還沒有任何有效的答案...刷新紅寶石堆棧鞋

我嘗試做一個鞋與應用紅寶石獲取名稱列表並將其保存在文件中。我想顯示已經引入的列表,並且隨着新名稱進入列表,顯示的列表將被更新。另外,我想將刪除按鈕與列表中的每個元素相關聯,以便用戶可以根據需要刪除該名稱。

這一切後,我能得到的唯一的事情是在你添加一個名稱的一部分,它被保存到列表中,但所有的名字與刪除按鈕列表添加第二個堆...不真幸運。這是我的代碼的樣子,函數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 
} 

對此的任何輸入都非常好!

非常感謝!

+0

到底是什麼問題了嗎? – Linuxios

+0

[Ruby Shoes GUI:連續更新段落]的可能重複(http://stackoverflow.com/questions/18067381/ruby-shoes-gui-continually-updating-paragraphs) – phoet

+0

@phoet我已經看到那篇文章,不是什麼我在尋找。它重做列表,但最後你會重複很多次。我一直在嘗試不同的方法,但任何人都完全按照我的要求進行。 –

回答

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