第一組:姚成棟 AngularJs下拉框在編輯頁面?zhèn)髦祮栴}
編輯頁面的數(shù)據(jù)我們往往是通過查詢頁面的model傳過來的,類似于
而編輯頁面的js中只需要在頭部引入model体啰,就可以接收到查詢頁面的trainoutline數(shù)據(jù)攒巍。如果要展示在編輯頁面上只需要用$scope.model=model即可。在一般情況下狡赐,數(shù)據(jù)能輕而易舉傳到前臺,但是如果遇到下拉控件钦幔,類似于如下圖
雖然能正常顯示數(shù)據(jù)枕屉,但是因為傳的值僅僅是賦給其中的model.BT_TheoryTeacherType,而不是ng-model的searchPara.BT_TheoryTeacherType鲤氢,所以無法保存值搀擂。
解決這個問題也很簡單西潘,直接在控制器中將model的值直接給searchPara.BT_TheoryTeacherType,類似于
即可哨颂。
再扯一點喷市,如果你用的是多選,則需要換成數(shù)組威恼,
但是多選的編輯頁面展示暫時沒想到什么好的方法品姓,因為我也沒遇到,等到實在要用了我再去研究~
第二組:徐晉 map集合類迭代方法
java中的map集合類用于存儲鍵值對箫措,提供鍵(key)到值(value)的映射腹备,不允許鍵重復(fù),值可以重復(fù)斤蔓。
代碼提供Map的兩種迭代方式:keyset方法和entryset方法植酥。并使用傳統(tǒng)Iterator方式和增強(qiáng)for循環(huán)的方式進(jìn)行迭代。
工程開發(fā)實踐中弦牡,更多的會使用到entryset方法友驮,重點掌握entryset!基礎(chǔ)例子
1. /**
2. *
3. * 功能:Map的迭代方式:
4. * 1.keyset方法
5. * 獲取Map集合中的所有鍵的Set集合驾锰,然后通過Set集合中的鍵訪問Map集合中相應(yīng)的值
6. * 2.entryset
7. * 獲取Map集合中所有的鍵值對卸留,并以Map.Entry的格式存入Set集合中,然后通過
8. * Map.Entry的getKey()和getValue()方法訪問鍵值對
9. */
10.
11. package com.test.map;
12.
13. import java.util.Iterator;
14. import java.util.LinkedHashMap;
15. import java.util.Map;
16. import java.util.Set;
17.
18. import org.junit.Test;
19.
20. public class Demo1 {
21.
22. //傳統(tǒng)方法迭代
23. @Test
24. public void test1(){
25.
26. Map<Integer,String> map = new LinkedHashMap<Integer,String>();
27. map.put(1, "aa");
28. map.put(2, "bb");
29. map.put(3, "cc");
30.
31. //傳統(tǒng) 1.keyset
32. //獲取map集合中的所有鍵的Set集合
33. Set<Integer> set = map.keySet();
34. Iterator<Integer> it = set.iterator();
35. while(it.hasNext()){
36. int key = it.next();
37. String value = map.get(key);
38.
39. System.out.println(key + ":" + value);
40. }
41. }
42.
43. @Test
44. public void test2(){
45.
46. Map<Integer,String> map = new LinkedHashMap<Integer,String>();
47. map.put(1, "aa");
48. map.put(2, "bb");
49. map.put(3, "cc");
50.
51. //傳統(tǒng) 2.entryset
52. Set<Map.Entry<Integer,String>> set = map.entrySet();
53. Iterator<Map.Entry<Integer,String>> it = set.iterator();
54. while(it.hasNext()){
55. Map.Entry<Integer,String> entry = it.next();
56. int key = entry.getKey();
57. String value = entry.getValue();
58.
59. System.out.println(key + ":" + value);
60. }
61. }
62.
63.
64. //使用增強(qiáng)for循環(huán)進(jìn)行迭代
65. @Test
66. public void test3(){
67.
68. Map<Integer,String> map = new LinkedHashMap<Integer,String>();
69. map.put(1, "aa");
70. map.put(2, "bb");
71. map.put(3, "cc");
72.
73. //增強(qiáng)for循環(huán) 1.keyset
74. Set<Integer> set = map.keySet();
75. for(int key : set){
76. String value = map.get(key);
77.
78. System.out.println(key + ":" + value);
79. }
80. }
81.
82. @Test
83. public void test4(){
84.
85. Map<Integer,String> map = new LinkedHashMap<Integer,String>();
86. map.put(1, "aa");
87. map.put(2, "bb");
88. map.put(3, "cc");
89.
90. //增強(qiáng)for循環(huán) 2.entryset
91. Set<Map.Entry<Integer,String>> set = map.entrySet();
92. for(Map.Entry<Integer,String> entry : set){
93. int key = entry.getKey();
94. String value = entry.getValue();
95.
96. System.out.println(key + ":" + value);
97. }
98. }
99.
100. }
第三組: JS與DOM編程藝術(shù)—— 最佳實踐
筆記:
平穩(wěn)退化:確保網(wǎng)頁在沒有JavaScript的情況下也能正常工作稻据。
分離JavaScript:把網(wǎng)頁的結(jié)構(gòu)和內(nèi)容與JavaScript腳本動作行為分開
向后兼容性:確保老版本的瀏覽器不會因為你的JavaScript腳本而死掉艾猜。
性能考慮:確定腳本執(zhí)行的性能最優(yōu)。
漸進(jìn)增強(qiáng):所謂漸進(jìn)增強(qiáng)就是用一些額外的信息層去包裹原始數(shù)據(jù)捻悯。按照“漸進(jìn)增強(qiáng)”的原則創(chuàng)建出來的網(wǎng)頁幾乎(如果不是全部的話)都符合“平穩(wěn)退化”原則匆赃。
類似與CSS,JavaScript和DOM提供的所有功能也應(yīng)該構(gòu)成一個額外的指令層今缚。CSS代碼負(fù)責(zé)提供關(guān)于“表示”的信息算柳,JavaScript代碼負(fù)責(zé)提供關(guān)于“行為”的信息。行為層的應(yīng)用方 式與表示層一樣姓言。分離JavaScript
var links= document.getElementsByTagName(“瞬项,”);
for(var i = 0;i<links,length;i++){
if(links[i].getAttribute("class")=="popup"){
links[i].onclick = function(){
popUp(this.getAttribute("href"));
return false;
}
}
}
以上代碼把調(diào)用popUp()函數(shù)的onclick事件添加到有關(guān)的鏈接上何荚。只要把它們存入一個外部的JavaScript文件囱淋,就等于是把這些操作從HTML文檔里分離出來了。而這就是“分離JavaScript”的含義餐塘。
還有個問題需要解決:如果把這段代碼存入外部文件妥衣,它們將無法運行。因為這段代碼的第一行是:
var links= document.getElementsByTagName(“,”)税手;
這條語句將在JavaScript文件被加載時立即執(zhí)行蜂筹。如果JavaScript文件是從HTML文檔的<head>部分用<script>標(biāo)簽調(diào)用的,它將在HTML文檔之前加載到瀏覽器芦倒。同樣艺挪,如果<script>標(biāo)簽位于文檔底部<body>之前,就不能保證哪個文件最先結(jié)束加載(瀏覽器可能一次加載多個)兵扬。因為腳本加載時文檔可能不完整麻裳,所以模型也不完整。沒有完整的DOM周霉,getElementsByTagName等方法就不能正常工作
必須讓這些代碼在HTML文檔全部加載到瀏覽器之后馬上開始執(zhí)行掂器。還好,HTML文檔全部加載完畢時將觸發(fā)一個事件俱箱,這個事件有它自己的事件處理函數(shù)国瓮。
文檔將被加載到一個瀏覽器窗口里,document對象又是window對象的一個屬性狞谱。當(dāng)window對象出發(fā)onload事件時乃摹,document對象已經(jīng)存在。
我將把我的JavaScript代碼打包在prepareLinks函數(shù)里跟衅,并把這個函數(shù)添加到widow對象的onload事件上去孵睬。這樣一來,DOM就可以正常工作了:
window.onload = prepareLinks;
function prepareLinks(){
var links= document.getElementsByTagName(“伶跷,”)掰读;
for(var i = 0;i<links,length;i++){
if(links[i].getAttribute("class")=="popup"){
links[i].onclick = function(){
popUp(this.getAttribute("href"));
return false;
}
}
}
}
別忘記把popUp函數(shù)也保存到那個外部JavaScript文件里去:
function popUp(winURL){
window.open(winURL,"popup","windth=320,height=480");
}
第四組:李俊 獲取list中具體某一元素某一字段的值
在增加信息的過程中,往往需要對新數(shù)據(jù)與原數(shù)據(jù)進(jìn)行對比叭莫,以此判斷新數(shù)據(jù)是否與原數(shù)據(jù)重復(fù)蹈集。若重復(fù)則添加(修改)無效,返回原值雇初。而原值保存在一個list里面拢肆。如果將重復(fù)值的行、列值得到靖诗,就可從list中獲取原值郭怪。本例中,newData是新數(shù)據(jù)刊橘,nameType=1表示是對機(jī)型進(jìn)行重復(fù)檢測鄙才,caption存放原值,row表示當(dāng)前行值促绵,column表示當(dāng)前列值:
private void checkDataRepeat(string newData, int nameType, string caption, int row, string column) {
if (nameType == 1) {
//機(jī)型重復(fù)檢測
if (checkShortRepeats.Contains(newData)) {
XtraMessageBox.Show("所填機(jī)型數(shù)據(jù)已存在攒庵,請勿重復(fù)");
//返回原值
UIT4007 ACTypeInfo = new UIT4007();
Loc.Support.GetT4007SearchPara SearchParam = new Loc.Support.GetT4007SearchPara {
UIT_Model = ACTypeInfo
};
UIModelListResult < UIT4007 > originalData = DispatchHandler.GetAcTypeList(SearchParam);
//對原數(shù)據(jù)進(jìn)行更改失敗的時候返回原值
if (row < originalData.List.Length) {
//取對應(yīng)字段的值
Model.UIT4007 fieldData = originalData.List[row];
string testValue = "";
Type type = typeof(Model.UIT4007);
System.Reflection.PropertyInfo property = type.GetProperty(column);
if (property != null) {
object cellValue = property.GetValue(fieldData, null);
testValue = (cellValue == null ? "": cellValue.ToString());
}
//修改失敗的單元格數(shù)據(jù)重新返回原值据途,方法是通過以原值進(jìn)行賦值
gridView1.SetRowCellValue(row, column, testValue);
gridView1.RefreshRow(row);
}
//在新增數(shù)據(jù)過程中,對單元格增加失敗時返回單元格最初空值狀態(tài)
else {
gridView1.SetRowCellValue(row, column, "");
gridView1.RefreshRow(row);
}
}
}
第五組:周倩宇
返回文檔中匹配指定的選擇器組的第一個元素(使用深度優(yōu)先先序遍歷文檔的節(jié)點 | 并且通過文檔標(biāo)記中的第一個元素叙甸,并按照子節(jié)點數(shù)量的順序迭代順序節(jié)點)。
語法
element = document.querySelector(selectors);
element 是一個 element 對象(DOM 元素)位衩。
selectors 是一個字符串裆蒸,包含一個或是多個 CSS 選擇器 ,多個則以逗號分隔糖驴。
例子
這個例子中僚祷,會返回當(dāng)前文檔中第一個類名為 "myclass" 的元素:
var el = document.querySelector(".myclass");
例子:一個強(qiáng)大的選擇方式
這個例子中,你將感受到selectors的強(qiáng)大贮缕。例子將返回<div class="user-panel main">標(biāo)簽中的<input name="login"/>標(biāo)簽辙谜。
<div class="user-panel main">
<input name="login"/> //這個標(biāo)簽將被返回
</div>
<script>
var el = document.querySelector("div.user-panel.main input[name=login]");
</script>
注意
如果沒有找到匹配元素,則返回 null感昼,如果找到多個匹配元素装哆,則返回第一個匹配到的元素。
如果選擇器是一個 ID定嗓,并且這個 ID 在文檔中錯誤地使用了多次蜕琴,那么返回第一個匹配該 ID 的元素。
如果指定的選擇器不合法宵溅,則拋出 SYNTAX_ERR 異常凌简。
querySelector()在 Selectors API 中引入。
傳遞給 querySelector 的字符串參數(shù)必須符合 CSS 語法恃逻。
CSS 偽類不會返回任何元素雏搂,見 Selectors API 中的相關(guān)規(guī)定。
如果要匹配的ID或選擇器不符合 CSS 語法(比如不恰當(dāng)?shù)厥褂昧嗣疤柣蛘呖崭瘢┛芩穑惚仨氂梅葱备軐⑦@些字符轉(zhuǎn)義凸郑。由于 JavaScript 中,反斜杠是轉(zhuǎn)義字符润绵,所以當(dāng)你輸入一個文本串時线椰,你必須將它轉(zhuǎn)義兩次(一次是為 JavaScript 字符串轉(zhuǎn)義,另一次是為 querySelector 轉(zhuǎn)義):
<div id="foo\bar"></div>
<div id="foo:bar"></div>
<script>
console.log('#foo\bar') // "#fooar"
document.querySelector('#foo\bar') // 不匹配任何元素
console.log('#foo\\bar') // "#foo\bar"
console.log('#foo\\\\bar') // "#foo\\bar"
document.querySelector('#foo\\\\bar') // 匹配第一個div元素
document.querySelector('#foo:bar') // 不匹配任何元素
document.querySelector('#foo\\:bar') // 匹配第二個div
</script>
例子:http://www.runoob.com/jsref/met-document-queryselector.html