Част 4. Администратор на данни
В този раздел демонстрираме как може да бъде написан "зрител" на KVS верига използвайки NITRO за визуализиране и N2O за !!!!!!!!!!!!!!.
Изложение на проблема
Страницит
KVS.Index

def event(:init)
def event(:writers)
def event({:link,id})
def event(:user)
def event(:session)
def event(:enode)
В червен цвчт са маркирани онези идентификаторите на DOM елементи, които ще бъдат заменени от сървара с нови елементи и отговарящи стойности.По начина, по който е в LiveView и дори в PHP! Но за разлика от използването на Suck and Blow notation за шаблон, също като ASP, PHP, EEX, DTL и други, NITRO предлага изразяване на HTML5 използвайки чист Erlang и е рамка, който заема достойно място в класа си: OCaml Ocsigen, Scala Асансьор, SML UrWeb, F# WebSharper, Erlang Nitrogen. Основната идея е, че пишем всичко на един език и учим начинаещи на един език, а в същото време ви показваме как да напишете просто уеб-базирано приложение, което ви помага да влезете по-бързо в езика.
priv/static/kvs.htm
<nav>
<a href='login.htm'>LOGIN</a>
<a href='plm.htm'>PLM</a>
<a href='bpe.htm'>BPE</a>
<a href='form.htm'>FORM</a>
<a href='kvs.htm'>KVS</a>
</nav>
<aside>
<article>
<section>
<h2>KVS</h2>
<p>Abstract chain database</p>
<div>USER: <span id=user></span>
SSD: <span id=disc></span>
RAM: <span id=ram></span><br>
SESSION: <span id=session></span>
VM: <span id=enode></span></div>
</section>
<div class=container>
<div><h2>WRITERS</h2>
<div id=writers></div></div>
<div><h2>CHAINS</h2>
<div id=feeds>To display the chain
select the writer.</div></div>
</div>
</article>
</aside>
lib/events/kvs.ex
defmodule KVS.Index do
use N2O, with: [:n2o, :nitro]
use FORM
use KVS
require ERP
require Logger
def parse(ERP."Employee"(person:
ERP."Person"(cn: name))),
do: name
def parse(_), do: []
def event(:init),
do:
[:user, :writers, :session, :enode]
|> Enum.map(fn x ->
[ NITRO.clear(x),
send(self(), {:direct, x})] end)
def event(:user),
do: NITRO.update(:user,
span(body: parse(:n2o.user())))
def event(:session),
do: NITRO.update(:session,
span(body: :n2o.sid()))
def event(:enode),
do: NITRO.update(:enode,
span(body: NITRO.compact(:erlang.node())))
def event({:link, i}),
do: [
NITRO.clear(:feeds),
:kvs.feed(i) |> Enum.map(fn t ->
NITRO.insert_bottom(:feeds,
panel(body: NITRO.compact(t))) end)
]
def event(:writers),
do:
:writer
|> :kvs.all()
|> :lists.sort()
|> Enum.map(fn writer(id: i, count: c) ->
NITRO.insert_bottom(
:writers,
panel(body:
[link(body: i, postback: {:link, i}),
' (' ++ NITRO.to_list(c) ++ ')']))
end)
def event(_), do: []
def ram(os), do: NITRO.compact(os)
end
Рутер
kvs — KVS.Index
Кодът на приложението може да бъде намерен в следните хранилища:
— o7/plm