|
Шпаргалка по Libretto во Flex |
Доступны следующие методы, использующие ключ:
// получение уникального ключа объекта в модели def <Form> m/ikey: m/Ikey! // получение строкового представления ключа объекта в модели // для передачи через клиента def <Form> m/stringIkey: String! // пример obj.m/stringIkey // получение ключа элемента по строковому представлению ключа def String m/toIkey // пример fix dIkey = dId.m/toIkey.*m/one // получение документа по ключу: def get<Form>(ikey: m/Ikey!): <Form>? // пример flex/getProject(dIkey)
<Form>
// пользователь данной сессии (если прошел аутентификацию) def m/user // бегущее название документа, локализованное по языку def Item m/runtitle(lang:String!) def Item m/runtitle // язык по-умолчанию // текущий статус документа def Item m/state: `#State_Участник`! // история статусов документа (жизненный цикл) def Item m/states // удаление документа def Item m/remove // восстановление удаленного документа def Item m/revive // проверка, активный документ или удаленный def Item> m/alive
// дата создания статуса def `#State_<Form>` // дата изменения статуса def `#State_<Form>` modidate // пользователь, создавший статус def `#State_<Form>` creauser // пользователь, модифицировавший статус def `#State_<Form>` modiuser // наименование статуса def `#State_<Form>` title // наименование статуса def `#State_<Form>` title(lang: String!) // имеет ли документ статус state def `#State_<Form>` is(state) // имя статуса, пользоваться аккуратнее из-за переименований def `#State_<Form>` name
querySource(
flex/allSource() as s.
where(s.name == #{name} and s.project == #{project} and s.type == #{type})
).*dyn[Source?]
fix project = this
queryPage(
flex/allPage() as p.where(p.name == #{name} and p.project == #{project})
)
queryЗадача(
tasks/allЗадача() as t.
where(t.stateIn(Создана, Перенесена))
)
fix curMs = дата.stamp
queryПрайсЛист(
main/allПрайсЛист() as pl.
where(pl.stateIn(Утвержден)).
where(действуетС as dt.(
dt.stamp >= #{curMs}
))
)
@<имя-пакета>_<имя-класса>_<имя-поля>
например,
this.@книги_Автор_библиотека
Это обратное поле возвращает всех участников, у которых значение поля предприятия содержит текущее предприятие predpr.
fix <compname> – доступ к под-компоненте по её имени (если компонента типа `code`) fix ctx – контекст веб-страницы fix userRole // вычисленное значение роли пользователя для страницы
def strings(key: String): String* def stringp(key: String): String+ def string(key: String): String? def stringe(key: String): String def ints(key: String): Int* def intp(key: String): Int+ def int(key: String): Int? def inte(key: String): Int def reals(key: String): Real* def realp(key: String): Real+ def real(key: String): Real? def reale(key: String): Real def dates(key: String): date/Date* def datep(key: String): date/Date+ def date(key: String): date/Date? def datee(key: String): date/Date def ikeys(key: String): m/Ikey* def ikeyp(key: String): m/Ikey+ def ikey(key: String): m/Ikey? def ikeye(key: String): m/Ikey def files(key: String): m/LoaderFile* def filep(key: String): m/LoaderFile+ def file(key: String): m/LoaderFile? def filee(key: String): m/LoaderFile
def env:runner/Env // получение контекста вычислений // получение значений из контекста вычислений def string(key:String!):String? def stringe(key:String!):String! def item(key:String!):doc/Item? // получение текущей страницы def page():model/Page! // получение текущей компоненты def component():model/Component! // получение припиненного документа def pinned(key:String!) // получение контекстного документа def pageContext():doc/Item?
hlink – метод, генерирующий url перехода на страницу проекта по имени страницы в проекта. Пример:
<a href=#{
ctxObj.gn/hlink("pagename"): {
"objKey" set obj.m/stringIkey
}
}
>Показать страницу</a>
ctxObj – объект, в контексте которого формируется вызываемая страница. Если у страницы контекста нет, то ctxObj опускается.
Асинхронный запрос по событию:
def ajax(method:String!, #:q/AjaxBuilder init) method - короткое имя метода init - параметры в соответствии с правилами jetx
Пример:
fix text = "Hello, World!"
fix cls = (".my-class", "#my-id")
fix newObj = messages/newMessage()
fix ajax =
q/ajax(jetx/url("/pageOp")): {
"obj" set this.m/stringIkey
"what" set "showPrice"
"text" set text
if (cls) as cls {val: cls}
}
Если в модели в пакете messages определен класс Message со строковым полем text, а в коде страницы есть, например, элементы
<input type="checkbox" name="car" value="Honda" class="my-class"/>
<textarea id="my-id" name="price">0.00</textarea>
<div id="space"></div>
<button onclick=#{ajax}>Узнать оконччательную цену</button>
то вызываемый метод pageOp мог бы выглядеть примерно так (в пакете url во Flex определяются методы, доступные для вызова из клиента):
package url
...
def pageOp = m/w:{
fix what = gn/stringe("what")
fix obj =
gn/stringe("obj").
m/toIkey as ikey.
messages/getMessage(ikey)
fix car = gn/stringe("car")
fix price = gn/real("price")
// изменяем поле объекта в модели
obj.text = gn/string("text")
if (what == "showPrice") {
fix комиссионные = 1.1
// изменяем содержимое страницы на клиенте
if (price) as price {
fix newDiv =
<div id="space">
Окончательная цена машины #{car} - #{price * комиссионные}
</div>
q/q("#space).replaceWith(newDiv)
}
}
}
m/w:{...} – метод организации транзакции в модели (аналогично базам данных). Код внутри {...} выполняется как единая транзакция ("либо все, либо ничего"). Без m/w доступ к модели отсутствует.