2009-09-06 5 views

ответ

3

Согласно /org/apache/wicket/extension/ajax/markup/html/modal/res/modal.js, вы не можете модифицировать модальный декоратор окна с помощью wicket api, потому что модальная разметка окна полностью определена в javascript. Таким образом, как всегда, вы можете выбрать простой, но плохой способ и заменить modal.js своим, или вы вряд ли сможете изменить модальное окно после показа с помощью js для изменения диапазона с классом «w_captionText». Или может быть (я не тестирую его), вы можете определить свой индивидуальный код в свойстве Caption и сообщить калитки, чтобы не избегать специального html char в этом Caption. Может быть, это помогает.

+0

Hmpf ... ну, спасибо, спасибо. – Yuval

+0

Если вы пошли простым путем. Что бы вы сделали, чтобы переопределить modal.js? –

6

Вы можете добиться такого эффекта с помощью CSS. Создайте свое собственное модальное окно (если вы хотите создать свой собственный стиль) и укажите ресурс 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> 

Все, что вам нужно:

/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> 
.... 

Вы можете попробовать переопределить функцию modal.js или просто сделать трюк с помощью JS DOM. Надеюсь, это поможет.

2

хак, но работает:

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

Как скрыть кнопку закрытия в вашем модальном окне в калитке? Мы нашли такое решение:

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"// 
        + "}"// 
      ); 
     } 
} 

На самом деле, вы можете вставить независимо класс из модального окна, и изменить его в некотором роде. Надеюсь, это поможет кому-то :)