เวอร์ชันภาษาอังกฤษ:http://dflying.dflying.net/1/archive/110_build_your_own_transformers_in_aspnet_atlas.html
การเชื่อมโยงใน ASP.NET Atlas เป็นวิธีที่มีประสิทธิภาพในการเชื่อมต่อสองวัตถุ (คุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับการโยงได้ที่ http://dflying.cnblogs.com/archive/2006/04/04/366900.html ) การเชื่อมโยง Atlas จะใช้คุณสมบัติที่เปลี่ยนแปลงบนออบเจ็กต์ต้นทางกับแอตทริบิวต์ที่ระบุโดยอัตโนมัติ ของวัตถุเป้าหมาย แต่บางครั้งคุณอาจต้องการแก้ไขคุณสมบัตินี้ก่อนที่จะนำไปใช้กับวัตถุเป้าหมาย ตัวอย่างเช่น เมื่อแสดงรายการที่จัดทำดัชนี คุณอาจต้องการให้ดัชนีเริ่มเพิ่มขึ้นจาก 1 แทนที่จะเป็น 0 เริ่มต้นใน JavaScript ในเวลานี้คุณต้องใช้ Atlas Transformer Transformer ใน Atlas เป็นเหมือนไปป์ไลน์ โดยจะถูกแทรกเข้าไปในกระบวนการกำหนดค่าจากคุณสมบัติของออบเจ็กต์ต้นทางไปยังคุณสมบัติของออบเจ็กต์เป้าหมาย เพื่อดำเนินการกรอง/ตกแต่ง/แปลงที่จำเป็น บนคุณสมบัติที่จะกำหนด (นี่คือการเพิ่ม 1 ให้กับแอตทริบิวต์แหล่งที่มา) จากนั้นกำหนดให้กับแอตทริบิวต์เป้าหมาย
Atlas มีหม้อแปลงในตัว เช่น เพิ่ม คูณ เปรียบเทียบ ฯลฯ อย่างไรก็ตาม ในการพัฒนาจริง ในกรณีส่วนใหญ่ เราจำเป็นต้องกำหนดหม้อแปลงของเราเอง มาทำความคุ้นเคยกับวิธีเขียน Transformer แบบกำหนดเองโดยการพัฒนาตัวอย่างของ CustomBooleanTransformer
CustomBooleanTransformer ใช้เพื่อแปลงค่าบูลีนให้เป็นรูปแบบที่เรากำหนดเอง เช่น ใช่/ไม่ใช่ หรือ เสร็จสมบูรณ์/กำลังดำเนินการ หากเราเลือกที่จะใช้การเชื่อมโยงเพื่อแสดงค่าบูลีนแก่ผู้ใช้ หม้อแปลงนี้จะมีประโยชน์มากและจะทำให้ผู้ใช้ได้รับประสบการณ์ที่เป็นมิตรมากขึ้น
โดยทั่วไป การสร้างหม้อแปลงไฟฟ้าจะมีสี่ขั้นตอนดังต่อไปนี้
รับค่าที่จะแปลงผ่านจากออบเจ็กต์การเชื่อมโยงแหล่งที่มา อันดับแรกเราเรียก get_value() เพื่อรับค่าที่เข้ามาและแปลงเป็นประเภทบูลีน
รับพารามิเตอร์ของหม้อแปลง พารามิเตอร์ที่นี่คือสตริงที่สามารถแบ่งออกเป็นสองส่วนด้วยเครื่องหมายจุลภาค (,) ค่าจริงแบบบูลีนจะถูกแปลงเป็นส่วนแรก และค่าเท็จจะถูกแปลงเป็นส่วนที่สอง หากพารามิเตอร์ที่ส่งเข้ามาว่างเปล่า จะใช้สตริงเริ่มต้นจริง/เท็จแทน
ทำการแปลง ในขั้นตอนนี้ คุณควรใช้ตรรกะของคุณเองเพื่อแปลงค่าขาเข้าให้เป็นค่าขาออก (โดยปกติจะใช้พารามิเตอร์ของหม้อแปลงที่ได้รับในขั้นตอนก่อนหน้า) ขั้นแรกเราแบ่งพารามิเตอร์ออกเป็นสองส่วนด้วยเครื่องหมายจุลภาค (,) จากนั้นแทนที่ true ด้วยส่วนแรก และแทนที่ false ด้วยส่วนที่สอง หากอาร์กิวเมนต์ไม่สามารถแบ่งออกเป็นสองส่วนได้ ให้ใช้จริง/เท็จแทน
หากต้องการส่งออกค่าที่แปลงแล้ว ให้เรียกใช้เมธอด set_value() เพื่อให้บรรลุผล
ด้านล่างนี้คือโค้ด JavaScript สำหรับ CustomBooleanTransformer บันทึกเป็น CustomBooleanTransformer.js
Sys.BindingBase.Transformers.CustomBoolean = ฟังก์ชั่น (ผู้ส่ง, eventArgs) {
// ขั้นตอนที่ 1 รับค่าอินพุต
ค่า var = eventArgs.get_value();
ถ้า (typeof (ค่า) ! = 'บูลีน') {
ค่า = Boolean.parse (ค่า);
-
// ขั้นตอนที่ 2 รับอาร์กิวเมนต์จะถูกใช้ในการแปลง
var customString = eventArgs.get_transformerArgument();
ถ้า (customString == null || customString == '') {
customString = 'จริง,เท็จ';
-
// ขั้นตอนที่ 3 ทำการแปลง
var customValues = customString.split(',');
ถ้า (customValues.length != 2)
-
ค่าที่กำหนดเอง[0] = 'จริง';
ค่าที่กำหนดเอง[1] = 'เท็จ';
-
var newValue = ค่า ? customValues [0] : customValues [1];
// ขั้นตอนที่ 4 ตั้งค่าที่แปลงแล้วเป็นเอาต์พุต
eventArgs.set_value(มูลค่าใหม่);
}
ตกลง ตอนนี้เรามาทดสอบ CustomBooleanTransformer นี้กัน เพิ่มช่องทำเครื่องหมายและกล่องข้อความลงในหน้าและผูกไว้ เมื่อเลือก/ยกเลิกการเลือกช่องทำเครื่องหมาย ค่าบูลีนที่แปลงแล้วที่เกี่ยวข้องจะแสดงในกล่องข้อความ
ด้านล่างนี้คือคำจำกัดความ HTML จากไฟล์ ASPX อย่าลืมเพิ่มการอ้างอิงไปยังไฟล์ CustomBooleanTransformer.js ใน ScriptManager
<atlas:ScriptManager ID="sm1" runat="server">
<สคริปต์>
<atlas:ScriptReference Path="CustomBooleanTransformer.js" />
</สคริปต์>
</atlas:ScriptManager>
<input id="myCheckbox" type="ช่องทำเครื่องหมาย" />
<input id="myTextbox" type="text" />
ด้านล่างนี้คือคำจำกัดความของสคริปต์ Atlas ในที่นี้ TransformerArgument จะถูกระบุเป็น 'ใช่,ไม่ใช่' เพื่อแปลงค่าบูลีนจริงเป็นใช่ และเท็จเป็นไม่ใช่ <เพจ xmlns:script=" http://schemas.microsoft.com/xml-script/2005 ">
<อ้างอิง>
</อ้างอิง>
<ส่วนประกอบ>
<checkBox id="myCheckbox" />
<textBox id="myTextBox">
<การผูก>
<binding dataContext="myCheckbox" dataPath="ตรวจสอบแล้ว"
คุณสมบัติ = "ข้อความ" แปลง = "CustomBoolean" TransformerArgument = "ใช่ไม่ใช่" />
</การผูก>
</กล่องข้อความ>
</ส่วนประกอบ>
</หน้า>