(插件本身已經減少了人力,如果開始無腦開發,簡直就是無能,@Ajax里面哪里幫助類生成的其實就是jquery.unobtrusive的一些特性)
jquery.unobtrusive是MVC中出現的jquery插件,用與和MVC中Ajax交互,但是我不怎么喜歡在構建頁面的時候用@Ajax.XXX去構建,感覺太依賴了,jquery.unobtrusive應該是所有web后端語言都能用的東西。所以就有了自己的單獨使用jquery.unobtrusive的旅程,研究jquery.unobtrusive的用法和源碼(之前已經有過閱讀源碼的文章和一定的注釋,地址:http://www.cnblogs.com/RainbowInTheSky/p/4466993.html)。
用法data-ajax="true"是開啟jquery.unobtrusive。
$(element.getAttribute("data-ajax-update"))
源碼中有這樣一段,說明data-ajax-update的值就是選擇器得到的,可以直接#id,.class。(data-ajax-update//更新的對象)
經常與data-ajax-mode配合使用
data-ajax-mode//更新的形式 BEFORE插入到對象之前 AFTER插入到對象之后 為空就是覆蓋
函數調用
data-ajax-begin data-ajax-complete data-ajax-success data-ajax-failure
上面的四個屬性對應$.ajax中的beforeSend,complete,success,error,他們的參數可以是程序片段,也可以是一個function,但是在寫參數的時候不能是functiong(){}這樣的匿名函數。基本涵蓋了ajax,滿足了需求。
不過在使用
data-ajax-loading//顯示loading的對象
data-ajax-loading-duration//持續時間 默認是0
這兩個屬性的時候需要擴展一下,因為jquery.unobtrusive沒有對齊做UI的實現,需要自己擴展。data-ajax-loading就是需要顯示的對象,data-ajax-loading-duration是持續時間,他們使用的是jquery.show(),和jquery.hide()這兩個函數。為此我寫了一個遮罩的擴展

1 //創建簡單遮罩層,顯示load時的信息,配合Unobtrusive 2 ; (function ($) { 3 //設置背景層高 4 function height() { 5 var scrollHeight, offsetHeight; 6 // handle IE 6 7 if ($.browser.msie && $.browser.version < 7) { 8 scrollHeight = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight); 9 offsetHeight = Math.max(document.documentElement.offsetHeight, document.body.offsetHeight); 10 if (scrollHeight < offsetHeight) { 11 return $(window).height(); 12 } else { 13 return scrollHeight; 14 } 15 // handle "good" browsers 16 } 17 else if ($.browser.msie && $.browser.version == 8) { 18 return $(document).height() - 4; 19 } 20 else { 21 return $(document).height(); 22 } 23 }; 24 //設置背景層寬 25 function width() { 26 var scrollWidth, offsetWidth; 27 // handle IE 28 if ($.browser.msie) { 29 scrollWidth = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth); 30 offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); 31 if (scrollWidth < offsetWidth) { 32 return $(window).width(); 33 } else { 34 return scrollWidth; 35 } 36 // handle "good" browsers 37 } 38 else { 39 return $(document).width(); 40 } 41 }; 42 /*==========全部遮罩=========*/ 43 function createLayer(load) { 44 //背景遮罩層 45 var layer = $("<div id=" + load.attr("data-loadlayer-id") + "></div>"); 46 layer.css({ 47 zIndex: 9998, 48 position: "absolute", 49 height: height() + "px", 50 width: width() + "px", 51 background: "black", 52 top: 0, 53 left: 0, 54 filter: "alpha(opacity=30)", 55 opacity: 0.3 56 }); 57 58 //圖片及文字層 59 var content = $("<div id=" + load.attr("data-loadlayer-id") + "-content" + "></div>"); 60 content.css({ 61 textAlign: "left", 62 position: "absolute", 63 zIndex: 9999, 64 //height: opt.height + "px", 65 //width: opt.width + "px", 66 top: "50%", 67 left: "50%", 68 verticalAlign: "middle", 69 //background: opt.backgroudColor,"#ECECEC" 70 background: "#ECECEC", 71 borderRadius: "3px", 72 padding:"2px 5px 2px 5px", 73 fontSize: "13px" 74 }); 75 76 //content.append("<img style='vertical-align:middle;margin:" + (opt.height / 4) + "px; 0 0 5px;margin-right:5px;' src='" + opt.backgroundImage + "' /><span style='text-align:center; vertical-align:middle;'>" + opt.text + "</span>"); 77 content.append("<span style='text-align:center; vertical-align:middle;color:#000000'>" + load.attr("data-loadlayer-msg") + "</span>"); 78 load.append(layer.append(content)); 79 var top = content.css("top").replace('px', ''); 80 var left = content.css("left").replace('px', ''); 81 content.css("top", (parseFloat(top) - parseFloat(content.css("height")) / 2)).css("left", (parseFloat(left) - parseFloat(content.css("width")) / 2)); 82 83 layer.hide(); 84 return this; 85 } 86 87 $(document).ready(function () { 88 createLayer($("div[data-loadlayer=true]")) 89 }); 90 })(jQuery)
使用方法
<div data-loadlayer="true" data-loadlayer-id="load" data-loadlayer-msg="loading..."></div>
然后需要在調用的地方data-ajax-loading="#load"即可