2013-01-24 15 views
11

Mam okno kendo, które ma formę wewnątrz niego. Formularz zawiera elementy wejściowe z danymi rekordu w nim zawartymi. Użytkownik może zamknąć okno i wybrać inny rekord do wyświetlenia. Kiedy użytkownik to robi, muszę ponownie pokazać okno kendo w tym samym formularzu, ale z innymi danymi rekordów. Oto co mam aktualnie robiJaki jest właściwy sposób ładowania nowej zawartości do okna kendo?

if (!$("#winContainer").data("kendoWindow")) { 
     $("#winContainer").kendoWindow({ 
      modal: true, 
      width: "969px", 
      height: "646px", 
      title: "View Record", 
      content: "record.jsp" 
     }); 
    } else { 
     $("#winContainer").data("kendoWindow").refresh({url: 'record.jsp'}); 
    } 

    $("#winContainer").data("kendoWindow").center().open(); 

Formularz jest zawarty w record.jsp, i wypełnić go z danymi JSON że uprzednio otrzymanej z serwera (za pośrednictwem JavaScript odwołuje się record.jsp). Muszę się upewnić, że okno nie pojawi się, dopóki nowe dane rekordów nie zostaną wypełnione w formularzu. Czy to jest właściwy sposób, aby to zrobić, czy jest jakiś lepszy sposób?

Odpowiedz

21

Zamiast tworzyć nowe okno za każdym razem, czy odświeżenie jego treść, ja polecam:

  1. Tworzenie okna,
  2. Każdy użytkownik wybierze nowy rekord, powiązanie nowych danych do okna i następnie otwórz.

W ten sposób wystarczy załadować stronę tylko raz.

Możesz również rozważyć zdefiniowanie strony record.jsp jako szablonu Kendo na oryginalnej stronie.

Przykład:

Biorąc pod uwagę następujące wybierane przez użytkownika rekordy:

var data = [ 
    { text1: "text1.1", text2: "text1.2" }, 
    { text1: "text2.1", text2: "text2.2" }, 
    { text1: "text3.1", text2: "text3.2" }, 
    { text1: "text4.1", text2: "text4.2" } 
]; 

oraz formularz zdefiniowane jako szablon z następującym HTML:

<script id="record-jsp" type="text/x-kendo-template"> 
    <div> 
     <p>This is your form with some sample data</p> 
     <label>text1: <input type="text" data-bind="value: text1"></label> 
     <label>text2: <input type="text" data-bind="value: text2"></label> 
    </div> 
</script> 

Nasz JavaScript byłoby coś podobne:

// Window initialization 
var kendoWindow = $("<div id='window'/>").kendoWindow({ 
    title : "Record", 
    resizable: false, 
    modal : true, 
    viewable : false, 
    content : { 
     template: $("#record-jsp").html() 
    } 
}).data("kendoWindow"); 

dane wiążą się z okna i otwarcie go:

function openForm(record) { 
    kendo.bind(kendoWindow.element, record); 
    kendoWindow.open().center(); 
} 

I wreszcie wywołanie funkcji z danymi.

openForm(data[0]); 

Można zobaczyć go w ruchu na tej JSFiddle

UWAGA: Jeśli nadal wolą używać strony zewnętrznej, wystarczy zmienić template: $("#record-jsp").html() przez: url: "record.jsp"

+0

Dziękuję za pokazanie mi tego podejścia . Działa przy wiązaniu złożonych obiektów. Zastosowanie tego podejścia będzie wymagało przyzwoitej liczby zmian w mojej aplikacji, ale na pewno warto. Muszę szybko zwolnić aplikację, więc będzie to kolejna zmiana fazy. Dzięki jeszcze raz. – James

+2

Tak więc dla tego wydania, jeśli wolisz przygotować końcową zawartość strony w pliku record.jsp, zawsze możesz dodać jakiś parametr, który umożliwiłby serwletowi podjęcie decyzji co do renderowania. Mam na myśli coś takiego jak 'record.jsp? Arg1 = xyz & arg2 = yzx i arg3 = zxy'. – OnaBai

+0

Dziękuję za udzielenie mi innej alternatywy na krótką metę i za szybką odpowiedź. Pracowałem trochę bardziej nad moim oryginalnym podejściem i uważam, że będzie dobrze na początkowym wydaniu.Ale twoje podejście jest zdecydowanie lepsze, a otrzymam to w następnym wydaniu. Chciałbym tylko (zapytałem) wiedzieć o twoim podejściu wcześniej w moim rozwoju. – James

Powiązane problemy