【转】近期Coolite控件的技术点总结
Code
?1<style?type="text/css">
?2????????.x-grid3-td-fullName?.x-grid3-cell-inner?{}{
?3????????????font-family:tahoma,?verdana;
?4????????????display:block;
?5????????????font-weight:normal;
?6????????????font-style:?normal;
?7????????????color:#385F95;
?8????????????white-space:normal;
?9????????}
10????????
11????????.x-grid3-row-body?p?{}{
12????????????margin:5px?5px?10px?5px?!important;??????
13????????????width:99%;
14?????????color:Gray;??????
15????????}
16
17????</style>
18
19????????????<View>
20????????????????<ext:GridView?ID="GridView1"?runat="server"?EnableRowBody="true">
21????????????????????<GetRowClass?Handler="rowParams.body?=?'<p>'?+?record.data.Notes?+?'</p>';?return?'x-grid3-row-expanded';"?/>????????????????????
22????????????????</ext:GridView>????????
23????????????</View>????
Coolite和EXT的自定義CSS方法就是這樣,?按照標準名字定義樣式就行了
如.x-grid3-summary-row,?自動識別,如果還不明白,可以下載個ExtJS,進入到ext.css里面就能看到所有CSS的名字
2.
??????(1)Coolite控件語言包問題,如Grid,和日期類型控件,漢化的方法
<asp:ScriptManager?ID="ScriptManager2"?runat="server">
????????<Scripts>
???????????<asp:ScriptReference?Path="ext-lang-zh_CN.js"?/>
??????</Scripts>
?</asp:ScriptManager>?
??????(2)ScriptManager問題,如果一個頁面內同時出現兩個ScriptManager就會報錯(導致一個頁面不能做多個管理模塊),如果實現讓“模塊”運行時,檢查當前頁面,是否其他模塊已經存在ScriptManager,存在就不注冊新的
Coolite.Ext.Web.ScriptManager?scmanager?=?Coolite.Ext.Web.ScriptManager.GetCurrent(this.Page);
if?(scmanager?==?null)
{
???scmanager?=?new?Coolite.Ext.Web.ScriptManager();
???this.Controls.Add(scmanager);
}
??? (3)針對上面兩個問題,我們在DNN在使用Coolite,并且調用漢化包,要這樣使用
??????????????if?(!Page.IsPostBack)
????????????????{
????????????????????Coolite.Ext.Web.ScriptManager?scmanager?=?Coolite.Ext.Web.ScriptManager.GetCurrent(this.Page);
????????????????????if?(scmanager?==?null)
????????????????????{
????????????????????????scmanager?=?new?Coolite.Ext.Web.ScriptManager();
????????????????????????this.Controls.Add(scmanager);
????????????????????}
????????????????????if?(DotNetNuke.Framework.AJAX.IsInstalled())
????????????????????{
????????????????????????DotNetNuke.Framework.AJAX.RegisterScriptManager();
????????????????????????System.Web.UI.ScriptManager?objScriptManager?=?System.Web.UI.ScriptManager.GetCurrent(this.Page);
????????????????????????if?(objScriptManager?!=?null)
????????????????????????{
????????????????????????????ScriptReference?scr?=?new?ScriptReference("~/js/ext-lang-zh_CN.js");
????????????????????????????objScriptManager.Scripts.Add(scr);
????????????????????????}
????????????????????}
3.Coolite和<%=this.ClientID %>
我們建立一個普通的ASP.NET網站,編寫如下代碼
HTML:
<ext:GridPanel??????runat="server"?
?????ID="GridPanel1"?
?????.
JS:
{
????alert(GridPanel1);
}
這樣是實現的, 但是同樣把類似代碼移到DotNetNuke下去實現
?
<ext:GridPanel?????runat="server"?
????ID="DocmentGridPanel"?
????Title="公文管理"?
????StoreID="StoreDocumentType"?
????Height="500"?Header="false">
???。。。。。。。。。
JS:
?function?MSG()
{
????alert(DocmentGridPanel);
}
這樣確實出錯的,找不到對象DocumentGridPanel...
?
如何解決這個問題呢?
我觀察兩種代碼生成的客戶端代碼
?
普通網站項目,查看頁面代碼<input?name="GridPanel1_SM"?type="hidden"?id="GridPanel1_SM"?/>
DNN外面有個dnn_ctr1486_DocumentType代表這個模塊框
<input?name="dnn$ctr1486$DocumentType$DocmentGridPanel_SM"?type="hidden"?id="dnn_ctr1486_DocumentType_DocmentGridPanel_SM"?/>
就有點明白了,DNN所有控件的外層包裹一個"容器".
我們用如下方法
<%=this.ClientID %>_DocmentGridPanel
就可以實現了
alert(<%=this.ClientID %>_DocmentGridPanel);
4.為你要刪除的記錄增加刪除驗證(Coolite)
Code
<script?type="text/javascript">??
function?DelSelectedRows()
{
????Ext.MessageBox.confirm('提示',?'是否要刪除這些記錄',function(btn)
????{
????????if?(btn?==?"yes")?
????????{
????????????Coolite.AjaxMethods.DeleteSelectedWorkFlow();
????????}
????});
}
function?DelSelected(selectedID)
{
????Ext.MessageBox.confirm('提示',?'是否要刪除此記錄',function(btn)
????{
????????if?(btn?==?"yes")?
????????{
????????????Coolite.AjaxMethods.DeleteWorkFlow(selectedID);
????????}
????});
}
</script>
?
<ext:Button?ID="btnDelete"?runat="server"??Text="刪除選中"?Icon="Delete">
????????<Listeners>
????????????<Click?Fn="DelSelectedRows"?/>
????????</Listeners>
????????</ext:Button>
GridPanel中。。
<Listeners>
<Command?Handler="if?(command=='Edit'){Coolite.AjaxMethods.EditWorkFlow(record.data.WFWorkFlowID);}else?if(command='Delete'){DelSelected(record.data.WFWorkFlowID);}"?/>
</Listeners>????
<SelectionModel>
?????<ext:RowSelectionModel?ID="RowSelectionModel1"?runat="server"?/>
</SelectionModel>?
5.Coolite的Combobox的setValue和setRawValue
Coolite的Javascript代碼中的
Combobox的setValue(record.data['DesktopModuleID']);
將會使SelectedItem的Text和Value都變成
record.data['DesktopModuleID']
所以調用之后應該調用次
Combobox的setRawValue(record.data['FriendlyName']);
會改變Text的值為想顯示的,SetRawValue一定要在SetValue之后調用
如以下代碼
Code
var?selectDesktopModule?=?function?(selectionModel?,?rowIndex,?record)?{
????????<%=?DesktopModuleWindow.ClientID?%>.hide(null);
????????hidCtrl.setValue(record.data['DesktopModuleID']);
????????hidCtrl.setRawValue(record.data['FriendlyName']);
????????hidCtrl.triggers[0].show();
????}
6.關于Coolite的AjaxMetod在MasterPage或者CMS系統下使用問題
??????在UserControl(ascx),MasterPage或者Page(aspx)中使用Coolite的AjaxMetod講究是不同的
在MasterPage中或者你在類似DotNetNuke的系統中調用AjaxMetod標志的方法,默認情況下是會找不到方法的,
處理此類問題需要使用AjaxMethodProxyID,使用的方法是在類的前面加上,如下
[AjaxMethodProxyID(IDMode = AjaxMethodProxyIDMode.None)]
partial class ModuleRightManager : PortalModuleBase
我們先看一下幾種AjaxMethodProxyID 的區別
1. None -? 命名前綴是空的,調用方法時直接使用 Coolite.AjaxMethods.ajaxMethod(...)
2. ClientID - 命名前綴需要加上當前類控件的client id(客戶端前綴)
?????????? 如Coolite.AjaxMethods.ctl00_UC1.ajaxMethod
???????????當然通常情況下我們Coolite.AjaxMethods.<%=this.ClientID>.ajaxMethod(...)
3. ID - 使用當前控件ID作為前綴, Coolite.AjaxMethods.UC1.ajaxMethod(...)
4. Alias - 使用別名做前綴,你可以聲明自己的一個別名, Coolite.AjaxMethods.myAlias.ajaxMethod(...)
5. AliasPlusID - 別名和ID同時使用,如 Coolite.AjaxMethods.myAliasUC1.ajaxMethod(...)
????[AjaxMethodProxyID(IDMode?=?AjaxMethodProxyIDMode.ClientID)]
????public?partial?class?PopupCustomerDetail?:?PortalModuleBase
轉載于:https://www.cnblogs.com/aooyu/archive/2009/11/13/1602520.html
總結
以上是生活随笔為你收集整理的【转】近期Coolite控件的技术点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 励志演讲
- 下一篇: JavaScript抽象类及Class.