HTML

Ruby on Rails

Könnyű Ruby on Rails programozási útmutatók

Friss topikok

Hogyan generáljunk javascript kódot gem-ből, sablonból

2010.10.21. 21:49 :: Semper Augustus

Ebben az útmutatóban megpróbálom leírni, hogyan lehet saját gem-ből egy, a gem-hez tartozó sablon fájlból generálni javascript kódot rails3 alkalmazásban. Ez olyan esetekben lehet hasznos, ha több alkalmazásunk van és egy form hitelesítést mindegyikben alkalmazni szeretnénk, így csak egyszer kell megírni. Más helyen is hasznos lehet, ahol javascriptet szeretnénk dinamikusan generálni. Az útmutató nem tartalmazza a teljes forráskódot, mert az túlságosan széttördelné a gondolatmenetet.

Először meg kell csinálnunk a gem fájlstruktúrát:

- jsvalidator
- lib
- jsvalidator.js.erb
- jsvalidator.rb
- jsvalidator.gemspec

Ezután szerkesszük a jsvalidator.gemspec fájlt, amit a jsvalidator könytárban hoztunk létre.

Gem::Specification.new do |spec|  
 spec.name = 'jsvalidator'
 spec.version ='0.0.1'
 spec.files = ["lib/jsvalidator.js.erb", "lib/jsvalidator.rb"]
 spec.summary = "Javascript form validator for rails3 with javascript."
 spec.author = 'Programmer'
 spec.email = 'programmer@yourdomain.com'
 spec.homepage = 'http://www.yourdomain.com'
 spec.has_rdoc = false 
end 

Az osztály struktúrát a jsvalidator.rb fájlban hozzuk létre. Az Erubis gem-et a "gem install erubis" paranccsal hozhatjuk létre.

 

require 'rubygems'
require 'active_support'
require 'erubis'

class Jsvalidator
# form object definiálása
attr_accessor :form

def form 
  return @form
end


# mi most nem inicializálunk semmit, de ebben a blokkban lehet  # a kezdeti paramétereket beállítani
  def initialize
end

# csinálunk egy függvényt, hogy a formunkat leírjuk,
# ez most egy másik object lesz valójában, amit később definiálunk
def define_form(attributes={})
  f=Form.new(attributes)
  @form=f if f
end

# a jsvalidator_helper egy olyan függvény, amit a Jsvalidator osztályból fogunk
# meghívni
def jsvalidator_helper
  # __FILE__ az a konstans, ami ezt a file-t jelenti
  path=File.dirname(__FILE__)
  template_path=File.join(path, 'jsvalidator.js.erb')
  # megadhatunk különböző objecteket a sablonnak, mint pl.: @jsvalidator,
  # ami jelen esetben self, mivel most csak a Jsvalidator osztállyal dolgozunk
  vars={ '@jsvalidator' => self }
  # tehát beolvassuk a sablon fájlt
  template= File.read(template_path)
  # Az Erubis végrehajtja a sablonban lévő ruby kifejezéseket és objecteket
  javascript=Erubis::Eruby.new(template).result(vars)
  # eután megcsináljuk a visszatérési stringet
  javascript="<script type="\text/javascript\">
//<![CDATA[
" + javascript + "
//]]>
</script>"
  return javascript
end

# a Jsvalidator osztály vége
end

# ezután írjuk le a Form osztályt
class Form < Jsvalidator
# Bármilyen objectet létre lehet hozni benne, mi most csak a Form.id-t használjuk 
attr_accessor :id
def initialize(attributes={})
  @id=attributes[:id]
end
end

 

Ebben a fájlban megcsináhatjuk a modelt és az adatstruktúrát is. Ezután szerkesszük meg a sjvalidator.js.erb fájlt. Ebben a javascriptünket fogjuk leírni, amit majd a view oldalunkba illesztünk be. Ebben a sablonban használhatunk bármilyen ruby-s kifejezést úgy, mintha view-ban tennénk, pl.: <%= @jsvalidator.akarmi %>, de előbb ezeket az objecteket definiálnunk kellett a Form osztályban.

document.observe("dom:loaded", function() {
  new Form.Observer("<%= @jsvalidator.form.id %>", 0.3, function(form, value)  {
// most megvannak a form értékeink egyetlen url formátumú sorban
// tehát meg kell csinálnunk a mező - érték párokat, ehhez a textArray segít
  textArray=unescape(value).split("&");
  var i=0;
  for(i=0; i<(textArray.length); i++)   {
    // ezután az összes érték  a cikluson belüll esz látható
    // a textArray[i] egy mező-érték párt jelent, ezt is felbontjuk
    value_line_with_equal_sign=textArray[i];
    value_name="";
    value_value="";
    value_name=value_line_with_equal_sign.split("=",2)[0];
    value_value=value_line_with_equal_sign.split("=",2)[1];
   // mostmár megvannak az értékek, bármit le tudunk ellenőrizni
   // a value_name a mező neve
   // a value_value a mező értéke
  }  } }

Ezután megcsináljuk a gem-et a jsvalidator könytárban, parancsorban:

gem build jsvalidator.gemspec

és installáljuk:

sudo gem install jsvalidator

Ezután módosítsuk a Gemfile fájlt, ami a Rails3 alkalmazásunk könyvátárában van. Illesszük be a következő sort:

gem 'jsvalidator', :path = "/home/user/gems/jsvalidator", :require = "jsvalidator"

Ezután parancssorba gépeljük be:

bundler update

Amennyiben nem akarsz gem-et létrehozni, mert folyamatosan szeretnéd tesztelni a kódot, egyszerűen adjuk hozzá az application_controller.rb fájlhoz ezt a sort a megfelelő elérési úttal:

require '/home/user/gems/jsvalidator/lib/jsvalidator.rb'

Mostmár csak a helpert kell hozzáadninuk a form view fájlunkhoz:

<% @jsvalidator=Jsvalidator.new %>
<% @jsvalidator.define_form( :id => "your_form_id" %>
<%= raw @jsvalidator.jsvalidator_helper %>

Ennyi az egész.

Az eredeti cikk megtalálható angolul a ruby-on-rails-tutorials.blogspot.com/2010/10/how-to-generate-inline-javascript-by.html linken.

Szólj hozzá!

Címkék: javascript tutorial ruby on rails inline útmutató hogyan how how to ruby create gem rails3

A bejegyzés trackback címe:

https://ruby-on-rails.blog.hu/api/trackback/id/tr792389735

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása