이번 포스트에서는 jQuery UI의 Dialog와 Validity라는 플러그인을 사용해보도록 하겠습니다. 먼저 아래의 사이트에서 다운로드 받으시면 됩니다.
http://jqueryui.com/
http://validity.thatscaptaintoyou.com/
Validity에서 Validation 메세지를 보여주는 방식은 3가지 있습니다. Label, Modal, Summary입니다. Summary방식을 사용하면 Validation 메세지를 한꺼번에 지정된 위치에 보여줄 수 있어 Summary 방식을 사용하였습니다. 그런데 여러 개의 Dialog에 Summary를 사용하다 보니 Dialog에서 Validation를 체크하는 코드가 실행되고 난 이후에 다른 Dialog에의 Validation메세지가 한꺼번에 보여지는 문제점이 있었습니다. Validity 코드를 살펴보니 validity-summary-container라고 class가 지정된 Dialog의 Validation를 사용하고 있었기 때문입니다. 그래서 저는 마스터 페이지에 Validation메세지를 보여주는 div태그를 하나 두고 해당 div태그를 Dialog에 prepend해주는 방식으로 사용했습니다.
마스터 페이지 추가 코드
<div id="validity" style="display:none" class="validity-summary-container"> <ul></ul> </div> |
초기화 코드
$(function() { $.validity.setup({ outputMode: "summary" }); $("#dialog").dialog({ width: "auto", bgiframe: true, autoOpen: false, modal: true, resizable: false, close: function() { var allFields = $([]).add($("#id")).add($("#name")); allFields.val(''); $.validity.clear(); } }); $("#create").click(Create); $("#modify").click(Modify); }); <input type="button" id="create" value="Create" /> <input type="button" id="modify" value="Modify" /> <div id="dialog" > <table> <tr> <td>ID</td> <td><input type="text" id="id" /></td> </tr> <tr> <td>Name</td> <td><input type="text" id="name"/></td> </tr> </table> </div> |
=> 먼저 Validity의 모드를 Summary로 해준 것을 볼 수 있고 dialog()를 사용하여 해당 div태그를 초기화 해주었습니다. 이렇게 초기화를 해주게 되면 해당 div태그는 화면에 보이지 않는 효과가 있습니다. 그리고 Create, Modify 이벤트를 등록해주는 것을 볼 수 있습니다. Delete와 같은 경우에는 Delete에 해당하는 Dialog를 따로 만들어서 사용하는 것이 바람직해 보여 여기서는 제외하였습니다.
close를 살펴보면 재미있는 문법이 보입니다. jQuery Object를 배열 형태로 만들어서 id와 name이라는 jQuery Object를 Add해주고 val('')이라는 메소드를 사용하여 배열 안에 존재하는 모든 jQuery Object를 초기화 해주는 것을 볼 수 있습니다. 실질적으로 여러 데이터가 존재하고 초기화 해주는 내용이 다르다면 하나씩 초기화 해주는 것이 맞지만 여기서는 해당 문법이 재미있어 보여 한 번 사용해보았습니다. 그리고 Validity의 Clear()메소드를 호출해주어서 Validation메세지도 초기화 해줍니다. 여기서 close가 가장 중요한 부분인데 이제 Create, Modify에서 만들게 될 Buttons에서 이 close를 호출해줌으로써 Dialog의 상태가 항상 초기화 상태로 돌아갈 수 있게 되는 것입니다. 그러면 Create에 대한 코드를 먼저 보도록 하겠습니다.
function Validate() { $.validity.start(); $("#id").require(); $("#name").require(); var result = $.validity.end(); $("#dialog").prepend($("#validity")); return result.valid; } function Create() { var options = { title: "Create", buttons: { OK: function() { if (Validate()) { // Execute Server Side Call $(this).dialog('close'); } }, Cancle: function() { $(this).dialog('close'); } } }; $('#dialog').dialog('option', options); $('#dialog').dialog('open'); } |
=> $(function(){})에서 Create이벤트를 추가해주었기 때문에 Create라는 button를 클릭하게 되면 위의 Create 함수가 실행이 됩니다. 먼저 Dialog의 title를 지정해주고 button를 만들어줍니다. 여기서는 ok, cancle 두 개의 버튼을 만들어주는데 공통적으로 $(this).dialog('close')를 호출하는 것을 볼 수 있습니다. 바로 이 부분이 이전에 초기화 코드에서의 close부분을 호출해주는 것입니다. ok버튼에서는 Validate라는 함수를 호출해줍니다. Validate라는 함수를 살펴보면 require라는 Validity에서 제공해주는 함수를 사용하는데 id, name중에 하나라도 공백으로 놔두고 ok버튼을 클릭하면 false가 리턴되어 Validation를 체크하는 것입니다. 이외에도 match, range, greaterThan 등등 많은 함수를 Validity에서 제공해주며 사용방법은 Validity 사이트의 문서를 참고하시기 바랍니다.
거의 모든 경우의 Create나 Modify의 양식은 똑같을 것입니다. 이번에는 Modify 함수의 코드를 보도록 하겠습니다.
function Modify() { } }, Cancle: function() { $(this).dialog('close'); } } }; $('#dialog').dialog('option', options); $('#dialog').dialog('open'); } |
=> Create와 유사합니다. 실질적으로 모두 구현을 한다면 buttons에의 ok버튼의 Server Side를 호출해주는 부분과 Modify기 때문에 Dialog를 띄우기 전에 id, name에 수정되기 전의 값을 조회해서 넣어주는 코드가 필요합니다.
jQuery UI의 Dialog를 이용하여 CRUD를 해줄 경우에 이러한 방법으로 구현하는 것이 제가 사용하는 가장 심플한 방법입니다.