2009-09-06 8 views

Odpowiedz

3

Zgodnie z /org/apache/wicket/extension/ajax/markup/html/modal/res/modal.js nie można modyfikować dekoratora okna modalnego przez apertę wicket, ponieważ modalny znacznik okna zdefiniowany jest całkowicie w javascript. Jak zwykle możesz wybrać prosty, ale zły sposób i zastąpić plik modal.js własnymi, lub nie możesz prawdziwie zmienić okna modalnego po pokazie używając js do zmodyfikowania span za pomocą klasy "w_captionText". Albo może być (nie testuję) możesz zdefiniować spersonalizowany kod we właściwości Podpis i nakazać, aby nie pominąć specjalnych znaków html w tym Podpisie. Może to pomaga.

+0

Hmpf ... no cóż, dziękuję. – Yuval

+0

Jeśli poszedłeś prostą drogą. Co dokładnie zrobiłbyś, aby zastąpić plik modal.js? –

6

Możesz osiągnąć tego rodzaju efekt przy pomocy CSS. Utwórz własne okno modalne (na wypadek gdybyś nie chciał stworzyć własnego stylu) i określ zasób css.

package org.ru5.test; 

import org.apache.wicket.ResourceReference; 
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; 
import org.apache.wicket.markup.html.CSSPackageResource; 
import org.apache.wicket.markup.html.resources.CompressedResourceReference; 
import org.apache.wicket.model.IModel; 

public class CustomModalWindow extends ModalWindow { 
    private static final long serialVersionUID = 1L; 

    private static ResourceReference CSS = new CompressedResourceReference(
      CustomModalWindow.class, "res/custom-modal.css"); 

    /** 
    * Creates a new modal window component. 
    * 
    * @param id 
    *   Id of component 
    */ 
    public CustomModalWindow(final String id) { 
     super(id); 
     init(); 
    } 

    /** 
    * Creates a new modal window component. 
    * 
    * @param id 
    *   Id of component 
    * @param model 
    *   Model 
    */ 
    public CustomModalWindow(final String id, final IModel<?> model) { 
     super(id, model); 
     init(); 
    } 

    private void init() { 
     add(CSSPackageResource.getHeaderContribution(CSS)); 
    } 

} 

/org/ru5/test/CustomModalWindow.html

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> 
<body><wicket:panel><div wicket:id="content"></div></wicket:panel></body> 
</html> 

Wszystko, czego potrzebujesz:

/org/ru5/test/res/custom-modal.css

.headBtn{position: absolute; z-index: 20001; top: 2px; left: 200px;} 

/org/ru5/test/TestPanelForTestWindow.html

.... 
<div class="headBtn"> 
<input type="button" value="ok"> 
</div> 
.... 

Możesz spróbować zastąpić funkcję modal.js lub po prostu zrobić lewę przy pomocy JS DOM. Mam nadzieję, że to pomoże.

2

bit hack, ale działa:

import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; 
import org.apache.wicket.model.IModel; 

public class FixedModalWindow extends ModalWindow { 
    private static final long serialVersionUID = 1L; 

    public FixedModalWindow(String id) { 
    super(id); 
    setResizable(false); 
    } 

    public FixedModalWindow(String id, IModel<?> model) { 
    super(id, model); 
    setResizable(false); 
    } 

    @Override 
    public FixedModalWindow setResizable(boolean resizable) { 
    // Cannot set resizable on the FixedModalWindow 
    return this; 
    } 

    @Override 
    public boolean isResizable() { 
    return false; 
    } 

    @Override 
    protected Object getShowJavascript() 
    { 
    // Hack in some JS to remove the onMove handlers 
    StringBuffer showJS = new StringBuffer(); 
    showJS.append(" "); 
    showJS.append((String) super.getShowJavascript()); 
    showJS.append("var popupWindow = Wicket.Window.get();\n"); 
    showJS.append("var nullHandler = function() {};\n"); 
    showJS.append("if(popupWindow != null) {\n"); 
    showJS.append("popupWindow.bind(popupWindow.caption, nullHandler);\n"); 
    showJS.append("popupWindow.bind(popupWindow.bottomRight, nullHandler);\n"); 
    showJS.append("popupWindow.bind(popupWindow.bottomLeft, nullHandler);\n"); 
    showJS.append("popupWindow.bind(popupWindow.bottom, nullHandler);\n"); 
    showJS.append("popupWindow.bind(popupWindow.left, nullHandler);\n"); 
    showJS.append("popupWindow.bind(popupWindow.right, nullHandler);\n"); 
    showJS.append("popupWindow.bind(popupWindow.topLeft, nullHandler);\n"); 
    showJS.append("popupWindow.bind(popupWindow.topRight, nullHandler);\n"); 
    showJS.append("popupWindow.bind(popupWindow.top, nullHandler);\n"); 
    showJS.append("}\n"); 
    return showJS.toString(); 
    } 

} 
1

Jak ukryć przycisk zamykania w modalnego okna furtki? Znaleźliśmy takiego rozwiązania:

ModalWindow yourModal = new ModalWindow("yourModalID") { 
     @Override 
     public void show(AjaxRequestTarget pTarget) { 
      super.show(pTarget); 

      pTarget.appendJavascript(""// 
        + "var thisWindow = Wicket.Window.get();\n"// 
        + "if (thisWindow) {\n"// 
        + "$('.w_close').attr('style', 'display:none;');\n"// 
        + "}"// 
      ); 
     } 
} 

Faktycznie, można wstawić cokolwiek klasy z modalnego okna i zmienić go w jakiś sposób. Mam nadzieję, że to komuś pomaga :)

Powiązane problemy