2012-03-15 15 views
7

Estoy tratando de usar el control xe: calendarView en una aplicación del mundo real. Hasta ahora, puedo leer datos de una vista y mostrarlos en el calendario, eso fue fácil.¿Alguien usa el control xe: calendarView de ExtLib? Si es así, ¿cómo funcionan los eventos?

Pero ahora quiero abrir una entrada por doble o singleclick, o quiero cambiar la fecha de una entrada arrastrando & drop. Para eso, el control tiene eventos como "onOpenEntry" donde puedo escribir SSJS. Pero estoy atascado aquí:

  • En tal caso, ¿cómo consigo el UNID del documento para el que se generó el evento? "this" es un objeto com.ibm.xsp.extlib.dwa.component.calendar.UICalendarView. Encontré un código fuente para esta clase, pero no veo ninguna forma de acceder al documento que debe abrirse.

  • Además, el evento "onOpenEntry" solo se activa una vez cuando se carga el control. Después de eso, no se activa al hacer clic o al hacer doble clic.

Para mí se parece a estos eventos no se aplican plenamente ... y en la base de datos de demostración extlib no se utilizan, también. ¿Alguien sabe cómo funciona esto? Gracias!

+1

En lugar de XPagesExt.nsf, eche un vistazo a la plantilla de TeamRoom XL y cómo los eventos de calendario se gestionan y manejan allí. –

Respuesta

2

Puede vincular el evento a la entrada del calendario utilizando dojo o jquery. Encontré el código a continuación para la entrada que contiene el unid.

Por lo que debe ser capaz de hacer algo como esto

  1. encontrar el ID .... calendarView1-Entry0
  2. obtener el atributo unid
  3. Enlace el id para el evento que desea y hacer una ventana emergente o lo que sea.

    <div id="home:_id1:dynC:_id556:calendarView1-entry0" class="s-cv-entry" calendar_type="Meeting" unid="723C2A5387AA7994C12579B30056D07E" calendar_date="20120622" calendar_index="0" calendar_start="20120622T000000,00$Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZN=Western/Central Europe" calendar_end="20120622T010000,00$Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZN=Western/Central Europe" calendar_start_notes="20120621T220000Z" calendar_bgcolor1="#C1DDF9" calendar_bgcolor2="#5495D5" calendar_fontcolor="undefined" calendar_bordercolor="undefined" calendar_external="0" onmouseover="dwa.cv.calendarView.prototype.cvHandler(event,this,'home:_id1:dynC:_id556:calendarView1');" onmouseout="dwa.cv.calendarView.prototype.cvHandler(event,this,'home:_id1:dynC:_id556:calendarView1');" onclick="dwa.cv.calendarView.prototype.cvHandler(event,this,'home:_id1:dynC:_id556:calendarView1');" ondblclick="dwa.cv.calendarView.prototype.cvHandler(event,this,'home:_id1:dynC:_id556:calendarView1');" oncontextmenu="dwa.cv.calendarView.prototype.cvHandler(event,this,'home:_id1:dynC:_id556:calendarView1');" style="top: 0px; left: 504px; width: 114px; height: 48px; "><canvas id="home:_id1:dynC:_id556:calendarView1-entry0-gradient" class="s-cv-entry" style="top:0px;left:0px;width:100%;height:100%;" color2="#C1DDF9" color="#5495D5" width="114" height="48"></canvas><div tabindex="0" class="s-cv-entry-innerframe s-cv-entry-innerframe-height s-cv-text" unselectable="on" aria-describedby="home:_id1:dynC:_id556:calendarView1-entry0-target" aria-haspopup="true" role="menu" style="top:0px;left:0px;width:100%;color:undefined;white-space: nowrap;" com_ibm_dwa_ui_draggable_redirect="home:_id1:dynC:_id556:calendarView1"><img alt="Meeting" src="/xsp/.ibmxspres/.dwa/common/images/transparent.gif" width="13" height="11" style="border-width:0px;background-position: -0px -0px; background-image: url(/xsp/.ibmxspres/.dwa/common/images/colicon1.gif);">&nbsp;Midsommar<br>8clfux40</div> 
    
4

El xe: control de calendario se basa en la vista iNotes calendario. Como resultado, los eventos solo ejecutan JavaScript del lado del cliente, no JavaScript del lado del servidor. Utilizando la sintaxis # {javascript: ...} puedes pasar SSJS evaluados, p.

#{javascript:(userBean.accessLevel >= lotus.domino.ACL.LEVEL_AUTHOR) && userBean.canDeleteDocs} 

Esto comprobará que el usuario tiene al menos acceso de autor a la base de datos y el privilegio de eliminación. Del mismo modo se puede utilizar el siguiente código para obtener la URL completa de la página actual para manipular la hora de crear la nueva URL para redirigir a:

var path = #{javascript:"\"" + @FullUrl('/') + "\""}; 

Tenga en cuenta que el lado del servidor JavaScript será evaluado cuando la función es escrito en XPage, no cuando se hace clic en el botón.

Puede obtener el unid utilizando (como Javascript del lado del cliente, JavaScript no del lado del servidor) elementos [0] .unid.

Consulte el calendario Control personalizado en la plantilla Teamroom que viene con el Paquete de actualización 1 o la Biblioteca de extensiones para obtener más información.

Cuestiones relacionadas