2009-06-11 9 views
0

Ich habe diesen Code:Rubin - Schuhe - edit_line Funktionsaufruf

Shoes.app do 

    data = [1,2,3,4] # could be also more 

    data.each { |i| 
    edit_line ("foo"){ puts i} 
    } 

end 

, wenn der Wert (foo) Änderung des edit_line Feld, ich in der Klemme 1,2,3 oder 4 zu sehen Aber ich brauche der Wert (.txt) von jedem edit_line-Feld. Wie kann ich darauf verweisen? Das Problem ist, dass Daten dynamisch sind und n Einträge haben können.

In PHP gibt es etwas wie $$ var gibt es etwas in Rubin? vielleicht könnte das helfen.

+0

Pestos Antwort funktioniert, warum akzeptieren Sie diese Antwort nicht, damit diese Frage geschlossen werden kann? – peter

Antwort

0

Ein Freund wies mich auf diese:

data.each_index { |i| data[i] = edit_line() { data[i].text } } 
0

Da Sie müssen sowohl den Index und die Daten dort gespeichert, Sie #each_with_index wollen. Ich habe noch nie Schuhe verwendet, damit ich nicht mit diesem Teil helfen kann, aber #each_with_index funktioniert wie folgt:

data = ["cat", "bat", "rat"] 
data.each_with_index {|i, d| print "#{i} => #{d} "} 

Dies drucken: 0 => cat 1 => bittet 2 => Ratte

2

Wenn Sie nur die Daten, um zu sehen, wenn ein edit_line Änderungen, Sie nutzen die change-Methode und die text Methode machen:

Shoes.app do 

    data = [1,2,3,4] # could be also more 

    data.each do |i| 
    edit_line('foo').change do |e| { puts "#Edit Line #{i} Changed: #{e.text}" } 
    end 
end 

Da der Standard-Block zum edit_line Verfahren ist das gleiche, können Sie dies vereinfachen:

Shoes.app do 

    data = [1,2,3,4] # could be also more 

    data.each do |i| 
    edit_line 'foo' do |e| { puts "#Edit Line #{i} Changed: #{e.text}" } 
    end 
end 

Beachten Sie auch, dass die Verwendung von do/end statt {} für mehrzeilige Blöcke ist die bevorzugte Art.