本站不再更新,歡迎光臨 java開發(fā)技術網(wǎng)
          隨筆-230  評論-230  文章-8  trackbacks-0
          當你需要通過dwr完成類似提交form的操作,了解DWRUtil.getValues是必須的
          ?/**
          ?* Given a map, call getValue() for all the entries in the map using the entry key as an element id.
          ?* Given a string or element that refers to a form, create an object from the elements of the form.
          ?* @see http://getahead.ltd.uk/dwr/browser/util/getvalues
          ?*/
          DWRUtil.getValues = function(data) {

          ? //定義ele變量,
          ? var ele;
          //如果ele是一個字符串通過 $函數(shù)轉化一下,$函數(shù)的使用見我的上個帖子深入分析dwr中的DWRUtil.$
          ? if (typeof data == "string") ele = $(data);
          //如果ele是個HTML元素對象,通常應該是一個form對象
          ? if (DWRUtil._isHTMLElement(data)) ele = data;
          ?
          ?if (ele != null) {
          ??? //如果ele不是form對象,返回,只有form對象才有elements 屬性
          ??? if (ele.elements == null) {
          ????? alert("getValues() requires an object or reference to a form element.");
          ????? return null;
          ??? }
          ??? //定義一個空對象reply
          ??? var reply = {};
          ??? //定義一個對象放key
          ??? var value;
          ??? //遍歷form,將表單key-value放入reply,忽略<input type="image"/>
          ??? for (var i = 0; i < ele.elements.length; i++) {
          ????? if (ele[i].id != null) value = ele[i].id;
          ????? else if (ele[i].value != null) value = ele[i].value;
          ????? else value = "element" + i;
          ????? reply[value] = DWRUtil.getValue(ele[i]);
          ??? }
          ??? return reply;
          ? }

          //如果傳入的參數(shù)對象不是表單對象,通常應該是與領域?qū)ο髮猨s對象
          ? else {
          ??? //遍歷對象屬性,將與屬性對應的頁面元素值拷到js對象中
          ??? for (var property in data) {
          ????? // Are there any elements with that id or name
          ????? if ($(property) != null || document.getElementsByName(property).length >= 1) {
          ??????? data[property] = DWRUtil.getValue(property);
          ????? }
          ??? }
          ??? return data;
          ? }
          };

          總結
          1)如果你需要使用ajax完成表單提交的操作,那么你應該使用DWRUtil.getValues,參數(shù)或者是個form對象,或者是個與領域?qū)ο髮膉s對象
          2)應該看到第二種用法的局限性,如果存在多個相同的表單或者是個復合的js對象,那么第二種用法是不合適的
          3)第一種用法看似復雜,但更具靈活性
          到底改如何選擇取決于具體的應用
          ====================================================
          ?背景:需要使用ajax完成表單提交操作

          核心代碼如下:

          ??? function addReply(frm){

          ?

          ?

          。。。。

          ?

          //利用dwr自動將frm提交的數(shù)據(jù)植入js對象,

          //DWRUtil.getValues的使用見我的上篇帖子

          var commentForm = DWRUtil.getValues(frm);

          ?

          //調(diào)用服務器端的服務

          CommentService.writeComment(writecallback,commentForm );

          。。。。。
          }

          ?

          注意以下幾點

          1)傳給服務的js對象最好嚴格與領域?qū)ο髮荒苡衚ey為""的屬性否則會報錯,可以有多余? 的屬性,但后臺會出現(xiàn)一些煩人日志信息告訴你無法匹配

          2)對于領域?qū)ο髞碚f,dwr在轉換時會遍歷所有get方法(根據(jù)傳入的js對象屬性進行反射不就好了,為什么要遍歷get方法,真是奇怪啊),所以注意你的get方法要健壯避免后臺會出很多日志信息匯報空指針之類的錯誤


          3)關于本地傳遞的js對象,必須結構與領域?qū)ο髮某橄蟮慕嵌瓤炊鄶?shù)情況領域?qū)ο笸?? 全可以用數(shù)組和hash結構描述,何況所謂的對應只是屬性的對應,所以合理的使用Array和Object完全可以實現(xiàn)js對象和領域?qū)ο蟮钠ヅ?br />

          ?

          4)必須配置合適的轉化器dwr知道如何將你傳入的js對象轉化為領域?qū)ο?/span>

          ?

          5)使用DWRUtil.getValues(frm)或者DWRUtil.getValues(obj)收集提交的數(shù)據(jù)


          ?? 方式的區(qū)別詳見該文上半部分


          posted on 2006-11-21 22:38 有貓相伴的日子 閱讀(1730) 評論(0)  編輯  收藏 所屬分類: dwr
          本站不再更新,歡迎光臨 java開發(fā)技術網(wǎng)
          主站蜘蛛池模板: 桐城市| 延庆县| 娱乐| 化州市| 柘荣县| 石景山区| 望江县| 琼中| 灵璧县| 沙河市| 桂阳县| 二连浩特市| 绍兴县| 肇庆市| 通许县| 邹平县| 孟州市| 江都市| 高青县| 山东省| 徐汇区| 乌拉特中旗| 闽清县| 沈丘县| 侯马市| 威远县| 醴陵市| 建宁县| 红原县| 中西区| 壤塘县| 安新县| 唐河县| 襄汾县| 塔城市| 西青区| 无极县| 光泽县| 荣成市| 衡阳县| 曲靖市|