С вьюхи передать данные документа в Dijit Dialog Box

xKlonx

Well-Known Member
Lotus team
10.09.2009
410
0
31
Украина, Киев
#1
Здраствуйте! Возникла проблемка которую не получается решить, есть ембедед вьюха, есть колонка со значениями в виде линка, нужно по нажатию на линк отображать dijit dialog, а в нём содержимое текущего документа.Заранее спасибо за помощь!
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#2
и что не получается?
берем хэПагу, кидаем в неё сорц из формы, на странице со вьюхой (онаже хэпага) делаем скрытый элемент для dijit
при нажатии на линк, делаем открытие, в хэпаге (юзая ИД дока), дока по сцылко, далее - dlg.show (анализируя урл, на предмет действия - ежели оно там есть)

можно, разумеется, тянуть контент, парсить его..., но это чуть сложнее (выдирать из формы, следить за уникальностью ИД элементов...)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#3
и ещё - для dijit надо делать патч, событий инит и сетуп, шобы диалог работал в форме
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#4
небольшие пояснения...
dijit диалог имеет две формы: декларативную и программную
первая - строится на основе элемента, на странице, логично предположить, что вторая - отображается аналогичным образом (эелемент создается в общем "дереве" DOM)
Т.о. пытаясь получить страницу и отобразить её в диалогбоксе, мы натыкаемся на необходимость "вписать" её, в текущий DOM...
Но не надо забывать, что помимо отображаемых элементов, на странице может присут. и код (доминошный)
Поэтому - логично сразу строить отображение так, чтобы элементы получаемой (по запросу) страницы, уже присут.

Такой подход приводит к построению "от обратного", т.е. строим получаемую страницу, в невидимом элементе, а вьюшку и т.п. добавляем. Т.е. добавляем все элементы, кот. должны отображаться "под" диалогом
Вызываем страницу "стандартно"
Будет две страницы (первая только для вьюшки) или одна (на кот. всегда есть скрытый элемент) - это уже детали.
По факту - элемент формы с датасорцом - это вариант для создания нового дока (в этом случ. не надо делать новый запрос и перерисовывать страницу)
 

xKlonx

Well-Known Member
Lotus team
10.09.2009
410
0
31
Украина, Киев
#5
lmike
делаем скрытый элемент для dijit
Что за елемент? Дата сорц есть на диалоге, сам диалог по линку открываю(естественно пустой),но туда каким то макаром нужно втыкнуть сорц текущего документа...
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#6
а почитать про декларативный метод дилога ;)
обычный div
об этом сказано выше (он и будет как у нового дока)
для того щобы док открыть - урл должен быть соответ. - с ИД дока и экшеном
т.е. по линку - открываем тотже хэпагес но с "нужным" урлом
в дожо онлоад анализируем урл, и кажим диалог - ежели есть экшн
остальное домина сама заполнит


Добавлено: и ещё раз повторю - ПАТЧ нужен, для диалога
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#9
где всё ето можно почитать
почитать что? я делал по собственной фантазии
просто нашёл как пропатчить диалог , а дальше сделал - как считал нужным
также сделал обработку серверсайд валидэйтов
при загрузке страницы ищу элемент с ошибками, если есть - кажу тотже диалог (а домина сама там вывела ошибки)
перехватываю закрытия диалога (типа cancel, на самом деле - hide) - и перечитываю страницу, чтобы сбросить доминошное заполнение
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#10
открытие нужного дока я уже указывал &action=editDocument&documentId=...
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#11
типа того:
Код:
var INIT=dojo.addOnLoad(function(){
//alert( "version:"+dojo.version.toString());
arrayPatch();
iePatch();
gDialog=dijit.byId("dialogOne");
if (checkStatus()) {
checkEdit();
}
});
function checkStatus(){
var status="";
try{
var el=dojo.query("ul[id$=':msg_all']")[0];
status=el.innerHTML;
console.log(el.innerHTML);
}catch(e){}
//если ошибки - показываем форму заново
if (status.length){
gDialog.connect(gDialog,"hide", cancelEdit);
gDialog.show();
return false;
}
return true;
}
function checkEdit(){
if ("editdocument" == parseQuery("action").toLowerCase()) {
gDialog.connect(gDialog,"hide", cancelEdit);
gDialog.show();
return true;
}
return false;
}
function cancelEdit(e){
console.log("cancel Edit");
var url=location.pathname+
"?OpenXPage";
window.location=url;
}
...........
onClick: function(){
var el=dojo.byId(this.elid);
console.log(this.label+":"+el.noteid);
var url=location.pathname+
"?OpenXPage&action=editDocument&documentId="+
el.noteid;
window.location=url;
}
...........
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#13
последний кусок - у меня редактирование при клике на элемент (меню, по правой кнопке)
потому кусок неполный
у элемента отображения, при создании его, задаётся id равный noteid (json из запроса к домине), и вешается менюшка
а остальное - там вроди "прозрачно"
патч к диалогу - ссылки выше
я вынес в отдельный файл (js) и подрубил его к хэПаге, добавил модуль (к нейже, в пропертях)
 

xKlonx

Well-Known Member
Lotus team
10.09.2009
410
0
31
Украина, Киев
#14
lmike
т.е. по линку - открываем тотже хэпагес но с "нужным" урлом
Проблема в том что я не могу открывать тотже хэпагес с нужным урлом так как диалог нужно открывать для респонс документа, тоесть теряю урл главного документа
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#15
parentid - по-моему параметр урла есть... хотя
хэпаге - побабарану - какой док открывать - оно сморит тока на ид и учит. датасорц
т.е. основное - связка id -> datasource

Добавлено: я не знаю - как с 2-мя датасорцами разруливать
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#16
теоретически - у датасорца есть оба параметра parentId и documentId
можно задавать их "руками" (скриптом, на серверсайд, при загрузке)

Добавлено: типа context.getUrlParameter("mycomplexId");
в mycomplexId запихнуть оба ID (парента и чайлда)
и рассовать их по датасорцам (соответственно)

Добавлено: сабмитить тока чайлдовый датасорц
 

xKlonx

Well-Known Member
Lotus team
10.09.2009
410
0
31
Украина, Киев
#17
Получилось наконец решить.Код линка колонки вьюхи:
Код:
dojo.addOnLoad(function(){

var dialog = dijit.byId("DialogTest");
if (dialog) { dialog.destroyRecursive(); }
var url = "Comments.xsp" + "?documentId=" + "#{java script:commentsEmbedded.getUniversalID()}" + "&action=editDocument";

var dialog = new dijit.Dialog({
title:"Коментар",
href: url,
refreshOnShow: true,
onCancel: function() {
window.location.reload();},
preventCache: true
},

dojo.byId("DialogTest")

);

dialog.show();
});