$("#open").click(function(){
$("#todolist").DataTable().draw();
});
Используйте эту функцию везде, где вы хотите обновить данные.
Во-первых, в Ruby нет никаких сигнатур методов. Самое близкое проверило бы арность функции. Утиный ввод требует взглядов по-другому (немного).
Заметный модуль является запуском, но если у Вас есть требование, чтобы иметь несколько событий от единого класса, это не могло бы быть достаточно.
Это - быстрый эскиз. Это поддерживает методы и блоки. Измените по мере необходимости для адаптации к коду, распараллелив подход, и т.д. Например, Вы могли использовать method_missing, чтобы иметь имя события в имени метода вместо того, чтобы иметь его в качестве параметра.
class EventBase
def initialize
@listeners = Hash.new
end
def listen_event(name, *func, &p)
if p
(@listeners[name] ||= Array.new) << p
else
(@listeners[name] ||= Array.new) << func[0]
end
end
def ignore_event(name, func)
return if !@listeners.has_key?(name)
@listeners[name].delete_if { |o| o == func }
end
def trigger_event(name, *args)
return if !@listeners.has_key?(name)
@listeners[name].each { |f| f.call(*args) }
end
end
class MyClass < EventBase
def raise_event1(*args)
trigger_event(:event1, *args)
end
def raise_event2(*args)
trigger_event(:event2, *args)
end
end
class TestListener
def initialize(source)
source.listen_event(:event1, method(:event1_arrival))
source.listen_event(:event2) do |*a|
puts "event 2 arrival, args #{a}"
end
end
def event1_arrival(*a)
puts "Event 1 arrived, args #{a}"
end
end
s = MyClass.new
l = TestListener.new(s)
s.raise_event1("here is event 1")
s.raise_event2("here is event 2")
Я повторил бы это нет аналога уровня языка в Ruby к событиям.NET. Способ, которым соглашения о направляющих с ним с ActiveSupport:: Обратные вызовы (существует пример на той странице).
Почему бы не написать свой собственный класс событий? Что-то вроде
class Event
def initialize
@handlers = Array.new
end
def fire
@handlers.each do |v|
v.call
end
end
def << handler
@handlers << handler
end
end
e = Event.new
e << lambda { puts "hello" }
e << lambda { puts "test" }
e.fire
Это всего лишь минимальный образец, но его можно расширить любым способом. Добавьте в .Net параметры, такие как sender и eventArgs, или что угодно; -)
Я написал драгоценный камень именно для этого, потому что у меня была точно такая же проблема. Попробуйте следующее:
gem install ruby_events
Следуйте инструкциям на http://github.com/nathankleyn/ruby_events , но в двух словах:
require 'rubygems'
require 'ruby_events'
class Example
def initialize
events.listen(:test_event) do |event_data|
puts 'Hai there!'
puts event_data
end
end
def call_me
events.fire(:test_event, 'My name is Mr Test Man!')
end
end
e = Example.new
e.call_me # Fires the event, and our handler gets called!