jquery.unobtrusive-ajax.js單獨的用法


(插件本身已經減少了人力,如果開始無腦開發,簡直就是無能,@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)
View Code

 

使用方法

 <div data-loadlayer="true" data-loadlayer-id="load" data-loadlayer-msg="loading..."></div>

 然后需要在調用的地方data-ajax-loading="#load"即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM