EasyUI panel 配合 Js 物件 開啟多個相同Url 問題

發現 大Bug

function SetNumObj(CallObj,putWin) {


   var Mythis = this;
一定要加 var 不然變全域變數 會亂跑


這篇是延續

Javascript 物件(類別) this很重要 bind()更重要

這次碰到一個奇怪問題
例如一次開3個panel
物件寫法是 
function SetNumObj(CallObj,putWin) {
    Mythis = this;
    Mythis.CallObj = CallObj;
    Mythis.putWin = putWin;
    Mythis.Run_type = 0;
    Mythis._OpenWin= function ()//自行定義
    {
        if ("#WinA" == Mythis.putWin) Mythis.Run_type = 1;
        if ("#WinB" == Mythis.putWin) Mythis.Run_type = 2;
        if ('#WinC' == Mythis.putWin) Mythis.Run_type = 3;
         $(Mythis.putWin).panel({ title: "", href: "SelNum.html", onLoad: Mythis._Init.bind(Mythis) });
   }
 Mythis._Init = function () {
    switch (Mythis.Run_type) {
       case 1: RunA(); break;
       case 2: RunB(); break;
       case 3: RunC(); break;
        }
    }
}
************************************************************
然後用
A1=new  SetNumObj(null,"#panelA");
A1._OpenWin();
B1=new  SetNumObj(null,"#panelB");
B1._OpenWin();
C1=new  SetNumObj(null,"#panelC");
C1._OpenWin();
****************************************

問題來了 不會如想像中  各自跑資料

只有 C1 有動作
用debug 查 switch (Mythis.Run_type)  發現這邊的確衝進來三次
但是 三次 Mythis.Run_type 都是 3
挖哩勒 怎會這樣?
設個alert() 查 A1 B1 C1 各自的 Run_type 都是 1 2 3 沒錯
但怎麼會?
我的推論是 onLoad: Mythis._Init.bind(Mythis) 這邊有問題
開3個Object 的確跑3次 只是傳進去的 Mythis 都是最後一個 Object 
所以 Mythis.Run_type 3次都是 3 
挖哩勒 怎會這樣?
如果分別寫3個 Object 就失去Object 的意義
***************************************

萬萬沒想到 最後 我還是解決了 哈~

先試 
onLoad: Mythis._Init.bind(Mythis,Mythis.Run_type)
 Mythis._Init = function (Rtype) {  接收 Mythis.Run_type
這次 進來  Rtype  就乖乖的 分別是 1 2 3
但我不只用到 Mythis.Run_type 還有一堆 總不能 加一長串吧? 打死我吧

乾脆 試 整個 Object 再傳一次
onLoad: Mythis._Init.bind(Mythis,Mythis)
 Mythis._Init = function (MyObject) {  接收 整個 Object
看他帶進來的 MyObject.Run_type  分別是 1 2 3
就這樣解決了....

















留言

熱門文章