avalon的常見問題


隨着avalon的普及,越來越多人加入avalon的大家庭。隨之而來的是各種問題。本文在這里統一解答一下。

使用avalon基本上有幾個方針要堅持

  • 數據必須先定義后使用,只能VM中定義,不能V中定義。
  • 數據必須先打扁后使用,比如對象的層次不宜太深,數組不能太長。
  • 頁面上不使用太復雜的邏輯,需要的話請封裝成函數,也方便自己或后人維護調試。
  • IE下方法名,屬性名注意不區分大小寫(因為是VBS)。
  • IE下方法中的this不一定指向自身。
  • avalon在domReady時自己執行了一次scan,對於后插入的DOM結構,需要自己手動scan。

SCRIPT1028: 缺少標識符、字符串或數字

這只發生於IE6-7,它不支持對象最后一個鍵值對后面添加逗號,如

 vm.$bOpts = {
         header: "提示信息title",
         content: "提示信息content",
  }

SCRIPT1041: 名稱重定義

這是avalon在IE6-8使用VBScript對象創建VM對象引起的,VB對象不支持為對象添加兩個相同的屬性名


avalon.define("test", function(vm){
  vm.aaa = 1
  avalon.mix(vm, {
     aaa: 2, //這里出問題了
     bbb: 3
  })
})

此外,由於VBScript變量名不區分大小寫


vm.user = {username: 'lili', userName: 'lilililili'}

這樣也會報名稱重定義 Error!

異步重寫空對象出錯

這是用法問題

<!DOCTYPE html>
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width">
        <script src="avalon.js" type="text/javascript"></script>
        <script>
            var model = avalon.define("test", function(vm) {
                vm.data = {}
            })
            setTimeout(function() {
                var data = {
                    a: 1,
                    b: 2,
                    c: 3
                }
              model.data = data //這樣正常
             // avalon.mix(model.data, data) //這樣會報錯
            }, 1000)
        </script>
        <style>
            #aaa{
                width: 100%;
                height:200px;
                background:green;
            }
        </style>
    </head>
    <body ms-controller="test">
       <input ms-duplex="data.a"/>
    </body>
</html>

事件回調的this對象$model, $vmodels不見了的問題

1.3.5已經廢掉, 源碼搜data.param.replace(/-\d+$/, "") ,加上這幾行

try{
     elem.$vmodel = vmodels[0]
     elem.$vmodels = vmodels
}catch(e){}

或者通過ms-click=callback(avalon.vmodels.xxx)傳入你的$vmodel

放在button標簽的事件點擊沒有生效

button標簽默認會提交頁面,產生跳轉,因此需要指定type="button",即<buttton type=button ms-click=check >

顯示隱藏切換失敗

<div class="inp,inte" ms-visible="integralCount > 0 && intergralCount > maxIntegral + spendIntegral" >
已超出可使用積分({{maxIntegral/100}}元),請重新輸入
<div>

原因,不要在視圖的指令里面寫&& , ||, 請封裝為函數

<div class="inp,inte" ms-visible="isVisible(integralCount, maxIntegral ,spendIntegral)" >
已超出可使用積分({{maxIntegral/100}}元),請重新輸入
<div>

交互數組中兩個元素的位置失敗

原因,只能通過數組方法,比如splice進行移出插入操作

<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <title>
            Avalon splice issue
        </title>
        <meta charset="utf-8">
    </head>
    <body>
        <ul ms-controller="test">
            <li ms-repeat="items">{{ el.name }}</li>
        </ul>
        <script src="avalon.js"></script>
        <script>
var test = avalon.define('test', function(vm) {
    vm.items = [
        {
            name: 'First lady'
        },
        {
            name: 'Second boy'
        },
        {
            name: 'Third guy'
        }
    ];
});

var temp = test.items.splice(2, 1);
test.items.splice(1, 0, temp[0].$model);//如果是簡單數據類型,就不需要.$model
        </script>
    </body>
</html>

IE6-8下報window.execScript 這一行錯誤

可能是你的VM上定義了一個很大的數組引發的

vm.err大IE6-8下報錯

type, err, erm, me是VBScript關鍵字

ms-controller="aaa",aaa這個VM只能應用一個元素上,頁面上不能 出現一個VM同時應用於兩個元素

低版本IE使用VBScript,不支持未婚先孕!

如有更多問題,請統一在這里提 https://github.com/RubyLouvre/avalon/issues/509


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM