Част 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