如果你照API上的寫法
Ext.Msg.alert('Please input Buyer Address', 'Please input Buyer Address',
function(){....});的話,則會出現還沒按"ok" button就執行function的內容
正確的寫法是:
Ext.Msg.alert('Please input Buyer Address', 'Please input Buyer Address',function(btn){
....你的函數....
});
附帶一點,Confirm dialog的寫法也很類似,如下:
Ext.Msg.confirm("Log off !!",
"Are you sure you want to exit?",
function ( answer ) {
if ( answer == 'yes') {
.....
.....
return;
}else {
return;
}
}
);
要注意.
2013年3月28日 星期四
2013年3月25日 星期一
關於Extjs Grid的二三事
1.要做捲動式分頁(infinity scroll)的話,store要設定為buffered,偏偏這會跟summary的特性衝突
如果你一定要有grouppingsummary的特性的話,那就不能用buffered-store
2.summarytype可以是函數,不過要配合「summaryRenderer」來使用才會出現
問題是有時明明在summaryType的function中有很正確的抓到資料了,怎麼在
如果你一定要有grouppingsummary的特性的話,那就不能用buffered-store
2.summarytype可以是函數,不過要配合「summaryRenderer」來使用才會出現
問題是有時明明在summaryType的function中有很正確的抓到資料了,怎麼在
summaryRenderer中又是NaN ? 答案出在資料格式,
如果該欄位是數字,而你硬要顯示文字(ex: Total:1501),就會有這樣的問題
解決方法除了是在column更改為gridcolumn之外,你的model類別也要對這個欄位進行修改
3.明明在server side產生json時,model的順序是對的,怎麼到Grid又出現亂序的問題?
問題是出在store中,必要時設定「sortOnLoad: false」屬性吧
以上,有想到再補充吧
2013年3月18日 星期一
extjs 4.1的「請稍候」全畫面遮罩如何設定?
extjs4的Ext.LoadMast(欲罩除元件,訊息);
例:
var myMask =
new Ext.LoadMask(me.findParentByType('panel'), { msg: "Please wait..." });
myMask.show();
這樣只會罩除到目前元件所在的上層物件
有時會造成只穿上半身沒穿褲子的感覺
通常要做遮罩動作時,是整個瀏覽器去做比較安全
(想想,user等不及結果給你切到別的單元去)
所以load mask這樣設定比較好:
var myMask = new Ext.LoadMask(Ext.getBody(), { msg: "Please wait..." });
myMask.show();
...
...
myMask.hide();
以上,報告完畢
例:
var myMask =
new Ext.LoadMask(me.findParentByType('panel'), { msg: "Please wait..." });
myMask.show();
這樣只會罩除到目前元件所在的上層物件
有時會造成只穿上半身沒穿褲子的感覺
通常要做遮罩動作時,是整個瀏覽器去做比較安全
(想想,user等不及結果給你切到別的單元去)
所以load mask這樣設定比較好:
var myMask = new Ext.LoadMask(Ext.getBody(), { msg: "Please wait..." });
myMask.show();
...
...
myMask.hide();
以上,報告完畢
asp.net MVC 與 Extjs的類別路徑整合問題
asp.net 的MVC與extjs的類別整合時,要小心的是把js的資料夾當做是個「control」
這時,只要用router.Ignore的方式來閃避就可以了.
(在app_start資料夾中的RouteConfig.cs加入設定)
另外,我們有必要把一些類別整合出來成為可以常常利用的模型(尤其是model & store)
以下圖:
我們把store/view/model...這類可能日後在不同單元都會用到的extjs類別都放在一個「ExtjsPackage」資料夾中,並把所有的js依其namespace佈署之
那,在asp.net MVC的view類別中,如果取用?
除了在_Layout.cshtml中要把ext-all.js & ext的css incluse之外
在asp.net MVC 的view javascript.中,要加上「Ext.Loader.setPath」設定相對關係,以下以範例:
==================================================================
Ext.onReady(function () {
Ext.QuickTips.init();
Ext.Loader.setPath('ExtjsPackage', '/BodhiRestaurantMng/ExtjsPackage');
var obj = Ext.create('ExtjsPackage.view.pnlContainAll', {
renderTo: 'MainPanel2PlaceEdit'
});
});
========================================================
如果沒有Ext.Loader.setPath的話,在指令「Ext.create('ExtjsPackage.view.pnlContainAll'」時,系統會request的路徑變成「BodhiRestaurantMng/ExtjsPackage/view/pnlContainAll.js」
就會產生404錯誤了
回頭來設定RouteConfig中,是加入這一行:
「 routes.Ignore("ExtjsPackage/{*pathInfo}");」
以上,大家加油吧!!
這時,只要用router.Ignore的方式來閃避就可以了.
(在app_start資料夾中的RouteConfig.cs加入設定)
另外,我們有必要把一些類別整合出來成為可以常常利用的模型(尤其是model & store)
以下圖:
我們把store/view/model...這類可能日後在不同單元都會用到的extjs類別都放在一個「ExtjsPackage」資料夾中,並把所有的js依其namespace佈署之
那,在asp.net MVC的view類別中,如果取用?
除了在_Layout.cshtml中要把ext-all.js & ext的css incluse之外
在asp.net MVC 的view javascript.中,要加上「Ext.Loader.setPath」設定相對關係,以下以範例:
==================================================================
Ext.onReady(function () {
Ext.QuickTips.init();
Ext.Loader.setPath('ExtjsPackage', '/BodhiRestaurantMng/ExtjsPackage');
var obj = Ext.create('ExtjsPackage.view.pnlContainAll', {
renderTo: 'MainPanel2PlaceEdit'
});
});
========================================================
如果沒有Ext.Loader.setPath的話,在指令「Ext.create('ExtjsPackage.view.pnlContainAll'」時,系統會request的路徑變成「BodhiRestaurantMng/ExtjsPackage/view/pnlContainAll.js」
就會產生404錯誤了
回頭來設定RouteConfig中,是加入這一行:
「 routes.Ignore("ExtjsPackage/{*pathInfo}");」
以上,大家加油吧!!
2013年3月13日 星期三
製作sencha touch app時,如何隱藏令人尷尬的網址列?
2013年3月12日 星期二
mac 的網路分享資料夾設定
2013年3月11日 星期一
在sencha architect 2.1如何做出android apk
0,請整理好目錄,因為日後 這很重要.
1,請設定 Architect界面工具列中的「package」所需的條件(中間那項沒成功不要緊,做就是了)
1,請設定 Architect界面工具列中的「package」所需的條件(中間那項沒成功不要緊,做就是了)
step2,不是急著去build,而是修改「pacakger」的設定:
![]() |
| step 2-1 |
![]() |
| step 2-2 |
「Package Settings Android」有很多事要先做,首先,你要先裝好Ruby for windows, jdk & android sdk,
(a),到java的bin中去做個keystore,指令如下:
=============================================
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048 ==================================================== 依照他所提問的,都回答完了,就會在當下目錄中產生一個 keystore.jks 請把路徑填到 certificatePath中(別忘了路徑斜線的問題) (b).android-sdk的路徑填入「sdkPath」欄位中 (c)「androidAPILevel」是怎麼找的?請到 你的android sdk路徑中,有個platforms目錄 會出現一堆android-xx的東西, 「androidAPILevel」這欄位後面就要填這個xx值step3,設定好了packager了,這次,再回到「Sencha cmd setup」按下build鈕 怎麼跟太監一樣--下面沒有了?
這是我們tool安裝時順序沒做好之故,正式而言,應該是先裝Ruby for windows再裝Sencha Architect,因為我們顛倒了,所以要自己到「開始」程式中找「start command prompt with Ruby」,用有Ruby加持過的功能,再來執行「sencha package build pacakger.json」的工作step4:build package:請在start Command Prompt with Ruby的命令視窗中,切換到你的sencha Architect 專案目錄,執行 sencha package build packager.json指令,如下圖: 可是....我們明明已經指定是android-10,而且在android-sdk\tools\platform下也有「android-10」平台了啊,怎麼會錯?別被android sdk騙了,有資料夾未必有下載完全,有還是沒有,請打開SDK-MANAGER.exe,讓他告訴你,如果不是installed,把他裝起來吧:![]() |
| make sure your SDK platform is installed |
裝完後,再回到Ruby 命令視窗再執行package build 指令 ,如果沒有錯誤訊息,就會出現一個build目錄,裡面有個xxx.apk,就是最後要佈署的成果了 step 5,安裝你的apk--佈署到實機上去玩玩看吧: (參考文件:http://jinnsblog.blogspot.tw/2011/10/how-to-use-sdk-to-install-apk.html) 把你的android手機接好usb(當然是已經設定好usb偵錯模式),回到筆電,打開dos視窗,切到 androd-sdk\tools\之下,執行「abd devices」看一下你的設備有沒有被找到,有的話,就會列出了: 接著,用adb install來安裝:![]() |
| 哼哼哼,叫你別用太高檔的android API Leve 就是不聽,你看吧 |
(這個錯誤是發生在我們之前在sencha architect中 packager 中的「androidAPILevel」設為12之故,問題是我這隻手機只有3.2的SDK....) 請回去第四步驟調整androidAPILevel及重新build package再回來做adb install工作 終於成功了!! 到你的手機上玩看看辛苦的成果吧Bodhisrestaurantmobile v1.0 2013年3月9日 星期六
sencha 2.1 + phoneGap 2.5 to android
1安裝項目 :
(1)sencha command(download and install SenchaCmd-3.0.2.288-windows.exe)
(2)phoneGap :2.5.0
(3)Android SDK: adt-bundle-windows-x86_64.zip
(4)JDK:1.6.0_39
(5)ant:apache-ant-1.8.4
2.設定好JAVA_HOME & ANT_HOME
3.在path中設定加入「 %JAVA_HOME%\bin;%ANT_HOME%\bin\ 」
還有 你的android-sdks之下\platform-tools;你的android-sdks之下\tools;你的Sencha.cmd所 在的目錄(以我為例是「C:\Users\John\bin\Sencha\Cmd\3.0.2.288」)
參考以下的網頁,設定:
http://cclerville.blogspot.tw/2013/01/sencha-touch-21-phonegap-220-android_3.html
(雖然是mac,不過因為目標都是要包成android專案,所以指令都是一樣的啦)
最主要的是從sencah create一個app --> phonegap create 相對需要的目錄(注意路徑問題,「build\appName\android\......」之下的順序)
最後是 sencha app build page &&.....的佈署工作
注意!!該中的 「sencha app build package && build/MyApp/android/cordova/debug」
應改為:
「sencha app build package && build/MyApp/android/cordova/build && build/MyApp/android/cordova/run」
(1)sencha command(download and install SenchaCmd-3.0.2.288-windows.exe)
(2)phoneGap :2.5.0
(3)Android SDK: adt-bundle-windows-x86_64.zip
(4)JDK:1.6.0_39
(5)ant:apache-ant-1.8.4
2.設定好JAVA_HOME & ANT_HOME
3.在path中設定加入「 %JAVA_HOME%\bin;%ANT_HOME%\bin\ 」
還有 你的android-sdks之下\platform-tools;你的android-sdks之下\tools;你的Sencha.cmd所 在的目錄(以我為例是「C:\Users\John\bin\Sencha\Cmd\3.0.2.288」)
參考以下的網頁,設定:
http://cclerville.blogspot.tw/2013/01/sencha-touch-21-phonegap-220-android_3.html
(雖然是mac,不過因為目標都是要包成android專案,所以指令都是一樣的啦)
最主要的是從sencah create一個app --> phonegap create 相對需要的目錄(注意路徑問題,「build\appName\android\......」之下的順序)
最後是 sencha app build page &&.....的佈署工作
注意!!該中的 「sencha app build package && build/MyApp/android/cordova/debug」
應改為:
「sencha app build package && build/MyApp/android/cordova/build && build/MyApp/android/cordova/run」
2013年3月2日 星期六
如何在sencha touch 2.1 的iconCls中,加入自己要的按鈕icon呢?
走踏江湖,接案,一定會有時要加入自己的icon
sencha touch 2.1 要加入icon時,不是只有icon丟進folder,還有設定要做,
示範如下(假設我們要加入的是一個cart.png, iconCls 為「cart」):
1.找到你要的icon(黑白),丟到你的resoures的themes\images\default\pictos目錄
2.修改resources下的\themes\stylesheets\sencha-touch\default\widgets中的_buttons.scss
在「@include pictos-iconmask('home');」之下加入
「@include pictos-iconmask('cart');」
3.故事還沒結束,下載RubyInstaller,目前找到的是「rubyinstaller-2.0.0-p0-x64.exe」
安裝後,它會有個「Start Command Prompt with Ruby」,打開他
執行以下的指令:
「gem install compass」
4.一樣在Ruby的命令視窗中,切到 resources下的sass目錄
(因為要使用目錄中的config.rb)
執行「compass compile」或是「compass watch」--讓它監視有沒有修改異動,有則compile
因為我們修改了_button.scss, compass compile後會在「./../css」中產生更新的css檔
恭喜,你的sencha class中就可以用這個iconCls了
(註,1你的png檔要先去背,不然還是一個白茫茫的四方塊,這點是靠safari的「開發人員」-->「顯示錯誤主控台」-->「網路」去看到這個png跟其他png檔比較才知道這回事
註2.Sencha Touch 2.2開始使用icon-font方式定義scss,詳細步驟參考2013/11/3 的筆記
)
sencha touch 2.1 要加入icon時,不是只有icon丟進folder,還有設定要做,
示範如下(假設我們要加入的是一個cart.png, iconCls 為「cart」):
1.找到你要的icon(黑白),丟到你的resoures的themes\images\default\pictos目錄
2.修改resources下的\themes\stylesheets\sencha-touch\default\widgets中的_buttons.scss
在「@include pictos-iconmask('home');」之下加入
「@include pictos-iconmask('cart');」
3.故事還沒結束,下載RubyInstaller,目前找到的是「rubyinstaller-2.0.0-p0-x64.exe」
安裝後,它會有個「Start Command Prompt with Ruby」,打開他
執行以下的指令:
「gem install compass」
4.一樣在Ruby的命令視窗中,切到 resources下的sass目錄
(因為要使用目錄中的config.rb)
執行「compass compile」或是「compass watch」--讓它監視有沒有修改異動,有則compile
因為我們修改了_button.scss, compass compile後會在「./../css」中產生更新的css檔
恭喜,你的sencha class中就可以用這個iconCls了
(註,1你的png檔要先去背,不然還是一個白茫茫的四方塊,這點是靠safari的「開發人員」-->「顯示錯誤主控台」-->「網路」去看到這個png跟其他png檔比較才知道這回事
註2.Sencha Touch 2.2開始使用icon-font方式定義scss,詳細步驟參考2013/11/3 的筆記
)
2013年2月9日 星期六
struts 二三事--redirectAction與chain差異
redirectAction雖然是可以再觸發下一個action物件,但其參數等等可以在址列上看到
如果不想用 get的方式,就用chain的方式來把請求傳到下一個action,不過網址列可是會維持在目前的這個action,
參考以下:
==============struts.xml片段======================
<action name="AttendanceHandler" class="actions.events.AttendanceHandler">
<result name="toAttendance" type="chain">
<param name="actionName">Attendance</param>
<param name="namespace">/events</param>
</result>
</action>
<action name="*" class="actions.events.{1}">
<result>/views/events/{1}.jsp</result>
<result name="redirect" type="redirect">${redirectUrl}</result>
</action>
======================================================
我們在執行完「AttendanceHandler.action」後,要再進入「Attendance」這個action進行請求
即可用此方式完成,當時如果你不怕網址會被人看出參數及值的話,就可以用redirectAction
注意,用chain的方式時,因為是要把request参數往後傳,所以在進入目前action時的參數名稱也要跟下個action的參數名稱一樣,這樣才不會銜接不起來
如:
欲從AttendanceHandler處理後,再請求Attendance的action,其中Attendance.java,有個eventId的屬性(自然也有getEventId/setEventId),所以在AttendanceHandler也要有getEventId/setEventId及eventId屬性,這樣可以串聯action時,不會雞同鴨講,造成後面的action無法執行
至於兩者之間的真正差異,請參考http://blog.csdn.net/jazywoo123/article/details/8292241
如果不想用 get的方式,就用chain的方式來把請求傳到下一個action,不過網址列可是會維持在目前的這個action,
參考以下:
==============struts.xml片段======================
<action name="AttendanceHandler" class="actions.events.AttendanceHandler">
<result name="toAttendance" type="chain">
<param name="actionName">Attendance</param>
<param name="namespace">/events</param>
</result>
</action>
<action name="*" class="actions.events.{1}">
<result>/views/events/{1}.jsp</result>
<result name="redirect" type="redirect">${redirectUrl}</result>
</action>
======================================================
我們在執行完「AttendanceHandler.action」後,要再進入「Attendance」這個action進行請求
即可用此方式完成,當時如果你不怕網址會被人看出參數及值的話,就可以用redirectAction
注意,用chain的方式時,因為是要把request参數往後傳,所以在進入目前action時的參數名稱也要跟下個action的參數名稱一樣,這樣才不會銜接不起來
如:
欲從AttendanceHandler處理後,再請求Attendance的action,其中Attendance.java,有個eventId的屬性(自然也有getEventId/setEventId),所以在AttendanceHandler也要有getEventId/setEventId及eventId屬性,這樣可以串聯action時,不會雞同鴨講,造成後面的action無法執行
至於兩者之間的真正差異,請參考http://blog.csdn.net/jazywoo123/article/details/8292241
訂閱:
文章 (Atom)

















