Parallel Effects On Rails
За да подобря usability-то в един от rails проектите си, ползвам интензивно scriptaculous поради няколко причини:
- Първо, библитеката е налична във всяка версия на rails и от ваша страна не се налага да извършвате никакви действия за да я подкарате да работи.
- Второ, библиотеката има широк кръг потребители, документирана е отлично и е също толкова добре поддържана.
- Трето, интеграцията й с prototype.js е пословична и в rails има готови helper-и за ползването й.
Преглеждайки документацията на scriptaculous вчера, попаднах на странно изключение – ефекта Parallel, който е единственият, който не приема DOM елемент като първи параметър, а вместо това използва масив от ефекти.
След половинчасово ръчкане на visual_effect от ScriptaculousHelper стигнах до извода, че вариант да подкарам този ефект под rails с готовите helper-и няма, което значи, че ще трябва да ползвам собствен. Затова в ApplicationHelper-а добавих следното:
def parallel_effects(effects,options) effects.each_with_index do |e,id| effects[id]=e[0,e.length-1] if e[-1,1]==";" end effect_list='[' + effects.join(', ') + ']' options_list='{' + options.map { |k,v| "#{k}:#{v}" }.sort.join(', ') + '}' begin record "new Effect.Parallel(#{effect_list},#{options_list})" rescue "new Effect.Parallel(#{effect_list},#{options_list})" end end
Използването на record зависи от контекста – ако ползвате helper-a в RJS template или inline RJS, ще бъде извикан метода record и съдържанието на string-а ще бъде предадено на page, което е еквивалентно на:
page << "somestring"
В противен случай ще бъде пуснат Exception за невалиден метод, прехвърляйки управлението в rescue блока, което позволява да използвате същия helper и в RHTML teplate, или при извикване на неща от сорта на link_to_remote или function_to_remote
Ето и пример за използване на helper-a:
# Using it in RJS <%= link_to_function('Show more', nil, :id=>"more") do |page| page.parallel_effects([ visual_effect(:blind_up,'content1'), visual_effect(:blind_down,'content2') ],:duration=>0.5) end %> # Using it in RHTML <%= link_to_remote("Again some shrinking", :url=>{:action=>:list}, :update=>'content1', :complete=>parallel_effects([ visual_effect(:blind_up,'content2'), visual_effect(:blind_down,'content1') ],:duration=>0.5)) %>
Маркери: rails, tips
За тази статия
В момента четете "Parallel Effects On Rails", статия в stinger's thoughts
Отпечатване на статията
- Публикувана на:
- 31.07.2007 в 10:21
- Категория:
- Web Development
- Изпращане:
- Изпрати чрез email
Категории
- Books (10)
- Linux/UNIX (66)
- Movies (32)
- Music (73)
- Web Development (59)
- Други (182)






















IE8 Webslice
RSS с публикации
Няма коментари
RSS с коментaрите