avalonjs项目实例和avalon.modern.js有什么区别

选择协议:自适应httphttps版本:2.0s///avalon.js/2.0s/avalon.js///avalon.js/2.0s/avalon.min.js///avalon.js/2.0s/avalon.modern.js///avalon.js/2.0s/avalon.modern.min.js///avalon.js/2.0s/avalon.next.js///avalon.js/2.0s/avalon.next.min.js///avalon.js/2.0s/avalon.test.js///avalon.js/2.0s/avalon.test.min.js版本:2.0b2///avalon.js/2.0b2/avalon.js///avalon.js/2.0b2/avalon.min.js///avalon.js/2.0b2/avalon.modern.js///avalon.js/2.0b2/avalon.modern.min.js///avalon.js/2.0b2/avalon.next.js///avalon.js/2.0b2/avalon.next.min.js///avalon.js/2.0b2/avalon.test.js///avalon.js/2.0b2/avalon.test.min.js版本:2.0b1///avalon.js/2.0b1/avalon.js///avalon.js/2.0b1/avalon.min.js///avalon.js/2.0b1/avalon.modern.js///avalon.js/2.0b1/avalon.modern.min.js///avalon.js/2.0b1/avalon.next.js///avalon.js/2.0b1/avalon.next.min.js///avalon.js/2.0b1/avalon.test.js///avalon.js/2.0b1/avalon.test.min.js版本:2.0b///avalon.js/2.0b/avalon.js///avalon.js/2.0b/avalon.min.js///avalon.js/2.0b/avalon.modern.js///avalon.js/2.0b/avalon.modern.min.js版本:2.2.4///avalon.js/2.2.4/arthur.js///avalon.js/2.2.4/avalon.js///avalon.js/2.2.4/avalon.min.js///avalon.js/2.2.4/avalon.modern.js///avalon.js/2.2.4/avalon.modern.min.js版本:2.2.3///avalon.js/2.2.3/arthur.js///avalon.js/2.2.3/avalon.js///avalon.js/2.2.3/avalon.min.js///avalon.js/2.2.3/avalon.modern.js///avalon.js/2.2.3/avalon.modern.min.js版本:2.2.2///avalon.js/2.2.2/arthur.js///avalon.js/2.2.2/avalon.js///avalon.js/2.2.2/avalon.min.js///avalon.js/2.2.2/avalon.modern.js///avalon.js/2.2.2/avalon.modern.min.js版本:2.2.1///avalon.js/2.2.1/arthur.js///avalon.js/2.2.1/avalon.js///avalon.js/2.2.1/avalon.min.js///avalon.js/2.2.1/avalon.modern.js///avalon.js/2.2.1/avalon.modern.min.js///avalon.js/2.2.1/pager.css///avalon.js/2.2.1/pager.js///avalon.js/2.2.1/pager.min.css///avalon.js/2.2.1/pager.min.js///avalon.js/2.2.1/routergrid.css///avalon.js/2.2.1/routergrid.js///avalon.js/2.2.1/routergrid.min.css///avalon.js/2.2.1/routergrid.min.js版本:2.2.0///avalon.js/2.2.0/arthur.js///avalon.js/2.2.0/avalon.js///avalon.js/2.2.0/avalon.min.js///avalon.js/2.2.0/avalon.modern.js///avalon.js/2.2.0/avalon.modern.min.js///avalon.js/2.2.0/pager.css///avalon.js/2.2.0/pager.js///avalon.js/2.2.0/pager.min.css///avalon.js/2.2.0/pager.min.js///avalon.js/2.2.0/routergrid.css///avalon.js/2.2.0/routergrid.js///avalon.js/2.2.0/routergrid.min.css///avalon.js/2.2.0/routergrid.min.js版本:2.1.16///avalon.js/2.1.16/avalon.js///avalon.js/2.1.16/avalon.min.js///avalon.js/2.1.16/avalon.modern.js///avalon.js/2.1.16/avalon.modern.min.js///avalon.js/2.1.16/avalon.next.js///avalon.js/2.1.16/avalon.next.min.js///avalon.js/2.1.16/avalon.rollup.js///avalon.js/2.1.16/avalon.rollup.min.js///avalon.js/2.1.16/avalon.test.js///avalon.js/2.1.16/avalon.test.min.js///avalon.js/2.1.16/pager.css///avalon.js/2.1.16/pager.js///avalon.js/2.1.16/pager.min.css///avalon.js/2.1.16/pager.min.js///avalon.js/2.1.16/routergrid.css///avalon.js/2.1.16/routergrid.js///avalon.js/2.1.16/routergrid.min.css///avalon.js/2.1.16/routergrid.min.js版本:2.1.8///avalon.js/2.1.8/arthur.js///avalon.js/2.1.8/avalon.js///avalon.js/2.1.8/avalon.min.js///avalon.js/2.1.8/avalon.modern.js///avalon.js/2.1.8/avalon.modern.min.js///avalon.js/2.1.8/avalon.next.js///avalon.js/2.1.8/avalon.next.min.js///avalon.js/2.1.8/avalon.test.js///avalon.js/2.1.8/avalon.test.min.js///avalon.js/2.1.8/pager.css///avalon.js/2.1.8/pager.js///avalon.js/2.1.8/pager.min.css///avalon.js/2.1.8/pager.min.js///avalon.js/2.1.8/routergrid.css///avalon.js/2.1.8/routergrid.js///avalon.js/2.1.8/routergrid.min.css///avalon.js/2.1.8/routergrid.min.js版本:2.1.7///avalon.js/2.1.7/avalon.js///avalon.js/2.1.7/avalon.min.js///avalon.js/2.1.7/avalon.modern.js///avalon.js/2.1.7/avalon.modern.min.js///avalon.js/2.1.7/avalon.next.js///avalon.js/2.1.7/avalon.next.min.js///avalon.js/2.1.7/avalon.rollup.js///avalon.js/2.1.7/avalon.rollup.min.js///avalon.js/2.1.7/avalon.test.js///avalon.js/2.1.7/avalon.test.min.js///avalon.js/2.1.7/pager.css///avalon.js/2.1.7/pager.js///avalon.js/2.1.7/pager.min.css///avalon.js/2.1.7/pager.min.js///avalon.js/2.1.7/routergrid.css///avalon.js/2.1.7/routergrid.js///avalon.js/2.1.7/routergrid.min.css///avalon.js/2.1.7/routergrid.min.js版本:2.1.6///avalon.js/2.1.6/avalon.js///avalon.js/2.1.6/avalon.min.js///avalon.js/2.1.6/avalon.modern.js///avalon.js/2.1.6/avalon.modern.min.js///avalon.js/2.1.6/avalon.next.js///avalon.js/2.1.6/avalon.next.min.js///avalon.js/2.1.6/avalon.test.js///avalon.js/2.1.6/avalon.test.min.js版本:2.1.5///avalon.js/2.1.5/avalon.js///avalon.js/2.1.5/avalon.min.js///avalon.js/2.1.5/avalon.modern.js///avalon.js/2.1.5/avalon.modern.min.js///avalon.js/2.1.5/avalon.next.js///avalon.js/2.1.5/avalon.next.min.js///avalon.js/2.1.5/avalon.test.js///avalon.js/2.1.5/avalon.test.min.js版本:2.1.4///avalon.js/2.1.4/avalon.js///avalon.js/2.1.4/avalon.min.js///avalon.js/2.1.4/avalon.modern.js///avalon.js/2.1.4/avalon.modern.min.js///avalon.js/2.1.4/avalon.next.js///avalon.js/2.1.4/avalon.next.min.js///avalon.js/2.1.4/avalon.test.js///avalon.js/2.1.4/avalon.test.min.js版本:2.1.3///avalon.js/2.1.3/avalon.js///avalon.js/2.1.3/avalon.min.js///avalon.js/2.1.3/avalon.modern.js///avalon.js/2.1.3/avalon.modern.min.js///avalon.js/2.1.3/avalon.next.js///avalon.js/2.1.3/avalon.next.min.js///avalon.js/2.1.3/avalon.test.js///avalon.js/2.1.3/avalon.test.min.js版本:2.1.2///avalon.js/2.1.2/avalon.js///avalon.js/2.1.2/avalon.min.js///avalon.js/2.1.2/avalon.modern.js///avalon.js/2.1.2/avalon.modern.min.js///avalon.js/2.1.2/avalon.next.js///avalon.js/2.1.2/avalon.next.min.js///avalon.js/2.1.2/avalon.test.js///avalon.js/2.1.2/avalon.test.min.js版本:2.1.1///avalon.js/2.1.1/avalon.js///avalon.js/2.1.1/avalon.min.js///avalon.js/2.1.1/avalon.modern.js///avalon.js/2.1.1/avalon.modern.min.js///avalon.js/2.1.1/avalon.next.js///avalon.js/2.1.1/avalon.next.min.js///avalon.js/2.1.1/avalon.test.js///avalon.js/2.1.1/avalon.test.min.js版本:2.1.0///avalon.js/2.1.0/avalon.js///avalon.js/2.1.0/avalon.min.js///avalon.js/2.1.0/avalon.modern.js///avalon.js/2.1.0/avalon.modern.min.js///avalon.js/2.1.0/avalon.next.js///avalon.js/2.1.0/avalon.next.min.js///avalon.js/2.1.0/avalon.test.js///avalon.js/2.1.0/avalon.test.min.js版本:2.0.9///avalon.js/2.0.9/avalon.js///avalon.js/2.0.9/avalon.min.js///avalon.js/2.0.9/avalon.modern.js///avalon.js/2.0.9/avalon.modern.min.js///avalon.js/2.0.9/avalon.next.js///avalon.js/2.0.9/avalon.next.min.js///avalon.js/2.0.9/avalon.test.js///avalon.js/2.0.9/avalon.test.min.js版本:2.0.8///avalon.js/2.0.8/avalon.js///avalon.js/2.0.8/avalon.min.js///avalon.js/2.0.8/avalon.modern.js///avalon.js/2.0.8/avalon.modern.min.js///avalon.js/2.0.8/avalon.next.js///avalon.js/2.0.8/avalon.next.min.js///avalon.js/2.0.8/avalon.test.js///avalon.js/2.0.8/avalon.test.min.js版本:2.0.7///avalon.js/2.0.7/avalon.js///avalon.js/2.0.7/avalon.min.js///avalon.js/2.0.7/avalon.modern.js///avalon.js/2.0.7/avalon.modern.min.js///avalon.js/2.0.7/avalon.next.js///avalon.js/2.0.7/avalon.next.min.js///avalon.js/2.0.7/avalon.test.js///avalon.js/2.0.7/avalon.test.min.js版本:2.0.6///avalon.js/2.0.6/avalon.js///avalon.js/2.0.6/avalon.min.js///avalon.js/2.0.6/avalon.modern.js///avalon.js/2.0.6/avalon.modern.min.js///avalon.js/2.0.6/avalon.next.js///avalon.js/2.0.6/avalon.next.min.js///avalon.js/2.0.6/avalon.test.js///avalon.js/2.0.6/avalon.test.min.js版本:2.0.5///avalon.js/2.0.5/avalon.js///avalon.js/2.0.5/avalon.min.js///avalon.js/2.0.5/avalon.modern.js///avalon.js/2.0.5/avalon.modern.min.js///avalon.js/2.0.5/avalon.next.js///avalon.js/2.0.5/avalon.next.min.js///avalon.js/2.0.5/avalon.test.js///avalon.js/2.0.5/avalon.test.min.js版本:2.0.4///avalon.js/2.0.4/avalon.js///avalon.js/2.0.4/avalon.min.js///avalon.js/2.0.4/avalon.modern.js///avalon.js/2.0.4/avalon.modern.min.js///avalon.js/2.0.4/avalon.next.js///avalon.js/2.0.4/avalon.next.min.js///avalon.js/2.0.4/avalon.test.js///avalon.js/2.0.4/avalon.test.min.js版本:2.0.3///avalon.js/2.0.3/avalon.js///avalon.js/2.0.3/avalon.min.js///avalon.js/2.0.3/avalon.modern.js///avalon.js/2.0.3/avalon.modern.min.js///avalon.js/2.0.3/avalon.next.js///avalon.js/2.0.3/avalon.next.min.js///avalon.js/2.0.3/avalon.test.js///avalon.js/2.0.3/avalon.test.min.js版本:2.0.2///avalon.js/2.0.2/avalon.bkb.js///avalon.js/2.0.2/avalon.bkb.min.js///avalon.js/2.0.2/avalon.js///avalon.js/2.0.2/avalon.min.js///avalon.js/2.0.2/avalon.modern.js///avalon.js/2.0.2/avalon.modern.min.js///avalon.js/2.0.2/avalon.next.js///avalon.js/2.0.2/avalon.next.min.js///avalon.js/2.0.2/avalon.test.js///avalon.js/2.0.2/avalon.test.min.js版本:2.0.1///avalon.js/2.0.1/avalon.bkb.js///avalon.js/2.0.1/avalon.bkb.min.js///avalon.js/2.0.1/avalon.js///avalon.js/2.0.1/avalon.min.js///avalon.js/2.0.1/avalon.modern.js///avalon.js/2.0.1/avalon.modern.min.js///avalon.js/2.0.1/avalon.next.js///avalon.js/2.0.1/avalon.next.min.js///avalon.js/2.0.1/avalon.test.js///avalon.js/2.0.1/avalon.test.min.js版本:1.5.9///avalon.js/1.5.9/avalon.js///avalon.js/1.5.9/avalon.min.js///avalon.js/1.5.9/avalon.mobile.js///avalon.js/1.5.9/avalon.mobile.min.js///avalon.js/1.5.9/avalon.modern.js///avalon.js/1.5.9/avalon.modern.min.js///avalon.js/1.5.9/avalon.modern.shim.js///avalon.js/1.5.9/avalon.modern.shim.min.js///avalon.js/1.5.9/avalon.shim.js///avalon.js/1.5.9/avalon.shim.min.js版本:1.5.8///avalon.js/1.5.8/avalon.js///avalon.js/1.5.8/avalon.min.js///avalon.js/1.5.8/avalon.mobile.js///avalon.js/1.5.8/avalon.mobile.min.js///avalon.js/1.5.8/avalon.modern.js///avalon.js/1.5.8/avalon.modern.min.js///avalon.js/1.5.8/avalon.modern.shim.js///avalon.js/1.5.8/avalon.modern.shim.min.js///avalon.js/1.5.8/avalon.shim.js///avalon.js/1.5.8/avalon.shim.min.js版本:1.5.7///avalon.js/1.5.7/avalon.js///avalon.js/1.5.7/avalon.min.js///avalon.js/1.5.7/avalon.mobile.js///avalon.js/1.5.7/avalon.mobile.min.js///avalon.js/1.5.7/avalon.modern.js///avalon.js/1.5.7/avalon.modern.min.js///avalon.js/1.5.7/avalon.modern.shim.js///avalon.js/1.5.7/avalon.modern.shim.min.js///avalon.js/1.5.7/avalon.shim.js///avalon.js/1.5.7/avalon.shim.min.js版本:1.5.6///avalon.js/1.5.6/avalon.js///avalon.js/1.5.6/avalon.min.js///avalon.js/1.5.6/avalon.mobile.js///avalon.js/1.5.6/avalon.mobile.min.js///avalon.js/1.5.6/avalon.modern.js///avalon.js/1.5.6/avalon.modern.min.js///avalon.js/1.5.6/avalon.modern.shim.js///avalon.js/1.5.6/avalon.modern.shim.min.js///avalon.js/1.5.6/avalon.shim.js///avalon.js/1.5.6/avalon.shim.min.js版本:1.5.5///avalon.js/1.5.5/avalon.js///avalon.js/1.5.5/avalon.min.js///avalon.js/1.5.5/avalon.mobile.js///avalon.js/1.5.5/avalon.mobile.min.js///avalon.js/1.5.5/avalon.mobile.shim.js///avalon.js/1.5.5/avalon.mobile.shim.min.js///avalon.js/1.5.5/avalon.modern.js///avalon.js/1.5.5/avalon.modern.min.js///avalon.js/1.5.5/avalon.modern.shim.js///avalon.js/1.5.5/avalon.modern.shim.min.js///avalon.js/1.5.5/avalon.shim.js///avalon.js/1.5.5/avalon.shim.min.js版本:1.5.4///avalon.js/1.5.4/avalon.js///avalon.js/1.5.4/avalon.min.js///avalon.js/1.5.4/avalon.mobile.js///avalon.js/1.5.4/avalon.mobile.min.js///avalon.js/1.5.4/avalon.mobile.shim.js///avalon.js/1.5.4/avalon.mobile.shim.min.js///avalon.js/1.5.4/avalon.modern.js///avalon.js/1.5.4/avalon.modern.min.js///avalon.js/1.5.4/avalon.modern.shim.js///avalon.js/1.5.4/avalon.modern.shim.min.js///avalon.js/1.5.4/avalon.shim.js///avalon.js/1.5.4/avalon.shim.min.js版本:1.5.3///avalon.js/1.5.3/avalon.js///avalon.js/1.5.3/avalon.min.js///avalon.js/1.5.3/avalon.mobile.js///avalon.js/1.5.3/avalon.mobile.min.js///avalon.js/1.5.3/avalon.mobile.shim.js///avalon.js/1.5.3/avalon.mobile.shim.min.js///avalon.js/1.5.3/avalon.modern.js///avalon.js/1.5.3/avalon.modern.min.js///avalon.js/1.5.3/avalon.modern.shim.js///avalon.js/1.5.3/avalon.modern.shim.min.js///avalon.js/1.5.3/avalon.shim.js///avalon.js/1.5.3/avalon.shim.min.js版本:1.5.2///avalon.js/1.5.2/avalon.js///avalon.js/1.5.2/avalon.min.js///avalon.js/1.5.2/avalon.modern.js///avalon.js/1.5.2/avalon.modern.min.js///avalon.js/1.5.2/avalon.modern.shim.js///avalon.js/1.5.2/avalon.modern.shim.min.js///avalon.js/1.5.2/avalon.shim.js///avalon.js/1.5.2/avalon.shim.min.js版本:1.5.1///avalon.js/1.5.1/avalon.js///avalon.js/1.5.1/avalon.min.js///avalon.js/1.5.1/avalon.modern.js///avalon.js/1.5.1/avalon.modern.min.js///avalon.js/1.5.1/avalon.modern.shim.js///avalon.js/1.5.1/avalon.modern.shim.min.js///avalon.js/1.5.1/avalon.shim.js///avalon.js/1.5.1/avalon.shim.min.js版本:1.5///avalon.js/1.5/avalon.js///avalon.js/1.5/avalon.min.js///avalon.js/1.5/avalon.modern.js///avalon.js/1.5/avalon.modern.min.js版本:1.4.8///avalon.js/1.4.8/avalon.js///avalon.js/1.4.8/avalon.min.js///avalon.js/1.4.8/avalon.mobile.js///avalon.js/1.4.8/avalon.mobile.min.js///avalon.js/1.4.8/avalon.mobile.old.js///avalon.js/1.4.8/avalon.mobile.shim.js///avalon.js/1.4.8/avalon.modern.js///avalon.js/1.4.8/avalon.modern.min.js///avalon.js/1.4.8/avalon.modern.shim.js///avalon.js/1.4.8/avalon.shim.js版本:1.4.7.2///avalon.js/1.4.7.2/avalon.js///avalon.js/1.4.7.2/avalon.min.js///avalon.js/1.4.7.2/avalon.mobile.js///avalon.js/1.4.7.2/avalon.mobile.min.js///avalon.js/1.4.7.2/avalon.mobile.old.js///avalon.js/1.4.7.2/avalon.mobile.shim.js///avalon.js/1.4.7.2/avalon.modern.js///avalon.js/1.4.7.2/avalon.modern.min.js///avalon.js/1.4.7.2/avalon.modern.shim.js///avalon.js/1.4.7.2/avalon.shim.js版本:1.4.7.1///avalon.js/1.4.7.1/avalon.js///avalon.js/1.4.7.1/avalon.min.js///avalon.js/1.4.7.1/avalon.mobile.js///avalon.js/1.4.7.1/avalon.mobile.min.js///avalon.js/1.4.7.1/avalon.mobile.old.js///avalon.js/1.4.7.1/avalon.mobile.shim.js///avalon.js/1.4.7.1/avalon.modern.js///avalon.js/1.4.7.1/avalon.modern.min.js///avalon.js/1.4.7.1/avalon.modern.shim.js///avalon.js/1.4.7.1/avalon.shim.js版本:1.4.7///avalon.js/1.4.7/avalon.js///avalon.js/1.4.7/avalon.min.js///avalon.js/1.4.7/avalon.mobile.js///avalon.js/1.4.7/avalon.mobile.min.js///avalon.js/1.4.7/avalon.mobile.old.js///avalon.js/1.4.7/avalon.mobile.shim.js///avalon.js/1.4.7/avalon.modern.js///avalon.js/1.4.7/avalon.modern.min.js///avalon.js/1.4.7/avalon.modern.shim.js///avalon.js/1.4.7/avalon.shim.js版本:1.4.6.3///avalon.js/1.4.6.3/avalon.js///avalon.js/1.4.6.3/avalon.min.js///avalon.js/1.4.6.3/avalon.mobile.js///avalon.js/1.4.6.3/avalon.mobile.min.js///avalon.js/1.4.6.3/avalon.mobile.old.js///avalon.js/1.4.6.3/avalon.mobile.shim.js///avalon.js/1.4.6.3/avalon.modern.js///avalon.js/1.4.6.3/avalon.modern.min.js///avalon.js/1.4.6.3/avalon.modern.shim.js///avalon.js/1.4.6.3/avalon.shim.js版本:1.4.6.2///avalon.js/1.4.6.2/avalon.js///avalon.js/1.4.6.2/avalon.min.js///avalon.js/1.4.6.2/avalon.mobile.js///avalon.js/1.4.6.2/avalon.mobile.min.js///avalon.js/1.4.6.2/avalon.mobile.old.js///avalon.js/1.4.6.2/avalon.mobile.shim.js///avalon.js/1.4.6.2/avalon.modern.js///avalon.js/1.4.6.2/avalon.modern.min.js///avalon.js/1.4.6.2/avalon.modern.shim.js///avalon.js/1.4.6.2/avalon.shim.js版本:1.4.6.1///avalon.js/1.4.6.1/avalon.js///avalon.js/1.4.6.1/avalon.min.js///avalon.js/1.4.6.1/avalon.mobile.js///avalon.js/1.4.6.1/avalon.mobile.min.js///avalon.js/1.4.6.1/avalon.mobile.old.js///avalon.js/1.4.6.1/avalon.mobile.shim.js///avalon.js/1.4.6.1/avalon.modern.js///avalon.js/1.4.6.1/avalon.modern.min.js///avalon.js/1.4.6.1/avalon.modern.shim.js///avalon.js/1.4.6.1/avalon.shim.js版本:1.4.6///avalon.js/1.4.6/avalon.js///avalon.js/1.4.6/avalon.min.js///avalon.js/1.4.6/avalon.mobile.js///avalon.js/1.4.6/avalon.mobile.min.js///avalon.js/1.4.6/avalon.mobile.old.js///avalon.js/1.4.6/avalon.mobile.shim.js///avalon.js/1.4.6/avalon.modern.js///avalon.js/1.4.6/avalon.modern.min.js///avalon.js/1.4.6/avalon.modern.shim.js///avalon.js/1.4.6/avalon.shim.js版本:1.4.5///avalon.js/1.4.5/avalon.js///avalon.js/1.4.5/avalon.min.js///avalon.js/1.4.5/avalon.mobile.js///avalon.js/1.4.5/avalon.mobile.min.js///avalon.js/1.4.5/avalon.mobile.old.js///avalon.js/1.4.5/avalon.mobile.shim.js///avalon.js/1.4.5/avalon.modern.js///avalon.js/1.4.5/avalon.modern.min.js///avalon.js/1.4.5/avalon.modern.shim.js///avalon.js/1.4.5/avalon.shim.js版本:1.4.4///avalon.js/1.4.4/avalon.js///avalon.js/1.4.4/avalon.min.js///avalon.js/1.4.4/avalon.mobile.js///avalon.js/1.4.4/avalon.mobile.min.js///avalon.js/1.4.4/avalon.mobile.old.js///avalon.js/1.4.4/avalon.mobile.shim.js///avalon.js/1.4.4/avalon.modern.js///avalon.js/1.4.4/avalon.modern.min.js///avalon.js/1.4.4/avalon.modern.shim.js///avalon.js/1.4.4/avalon.shim.js是国内最强大的MVVM框架,没有之一,虽然淘宝KISSY团队也搞了两个MVVM框架,但都无疾而终。其他的MVVM框架都没几个。也只有外国人与像我这样闲的架构师才有时间钻研这东西。我很早之前就预言,MVVM是前端的终极解决方案。我之前在盛大无线做盛大通行证就深有体会,一个业务逻辑对应十来个不同的界面,分层架构是必不可少的。因此双向绑定作为解药,结合很早就流行的MVC框架,衍生出MVVM这神器。
但这么牛叉的东西,为什么现在才流行起来呢?要不是谷歌振臂高呼,这个一直缩在flex, wps世界的MVVM就根本不可能在前端冒头。要知道,微软也搞了knockout, winjs等MVVM框架。原因之一,这东西非常难做。早些年,JS没有后端语言那种监听对象属性变动的高级特性,属性的变动如何同步视图,这需要非常巧妙的依赖收集机制,绑定(或叫指令)需要把一个编译器把VM的属性分离出来,这也不是一般人能搞出来的。加之,前端本来就没有几个是专科出来的人,都是半路出家的,写编译器与玩转jQuery不是同一个概念。knockout没有依赖什么高级特性,但用户体验太差,因此也没有流行起来。
目前使用avalon的公司名单
但墙的内外毕竟是两个世界,这也是avalon存在的理由。avalon的出现时间比angular早多了,它最早是模拟knockout为了解决盛大通行证这样多界面的东东而研发出来的。为了不像knockout那样别扭,它是使用IE8的Object.defineProperty劫持用户对数据的操作,从而实现对视图的同步。这种设计也比后来的angular的脏检测优秀许多。但Object.defineProperty是缺陷的,兼容性不好,早期的标准浏览器需要用_defineGetter_, _defineSetter_, IE6,IE7,IE8(因为IE8的Object.defineProperty也是有缺陷的)需要用VBScript,为了弄懂VBScript,我还特意入了一本90块钱的书。但这不是全部,兼容IE6是非常痛苦的,需要写大量额外的代码,因此存在与两个版本。
avalon.js的兼容性是最好的,支持IE6及非常老的标准浏览器。这里的标准浏览器特指W3C阵营中的safari, opera, firefox, chrome。avalon.js在最近几个月的升级中,还对IE的VML,W3C方的SVG进行各种兼容处理。要知道,就是浏览器自身的API,也有各种问题。从这个层面来看,avalon.js的兼容能力比jQuery强多了。并且它可以与jQuery和平共处,享用其强大的AJAX,动画, Deferred等功能。加之,avalon现在拥有全职的团队帮它打造,大家就不用自己去拼凑各种插件了。
&!DOCTYPE html&
&title&TODO supply a title&/title&
&meta charset="UTF-8"&
&meta name="viewport" content="width=device-width"&
&script src="avalon.js"& &/script&
&div&TODO write content&/div&
上面就是一个范本,如果想引入avalon.modern.js,就是把上面script标签的src改一改。
avalon.modern.js之前是叫做avalon.mobile.js,是打算用在移动端的,里面是用了许多高级API,因此性能比avalon.js高许多。由于也不算兼容旧式IE(avalon.modern.js是支持IE10及以上的新浏览器),许多兼容逻辑也删掉了,因此体积少了许多,大概少了1000行代码。
如果你想做移动端开发呢,这要用到触屏事件,有一个mobile.js,你可以直接将它的源码 拷贝到avalon.modern.js里最后一个花括号的前面,或者这样引入:
&!DOCTYPE html&
&title&TODO supply a title&/title&
&meta charset="UTF-8"&
&meta name="viewport" content="width=device-width"&
&script src="avalon.modern.js"&&/script&
&script src="mobile.js"&&/script&
&div&TODO write content&/div&
我建议使用拷贝方式,方便以后我们通过合并方式,把所有业务逻辑也统统合并成一个文件。
avalon.js本身是自带加载器,它是符合AMD规范,因此它可以用requirejs项目的rjs进行合并。如果大家不想用avalon.js的自带加载器,可以在紧接着的 script标签里将它禁用。
&!DOCTYPE html&
&title&TODO supply a title&/title&
&meta charset="UTF-8"&
&meta name="viewport" content="width=device-width"&
&script src="avalon.modern.js"&&/script&&!--不兼容IE6到8,也不玩移动端就用这个--&
avalon.config({
loader: false
&div&TODO write content&/div&
或者直接在源码里改,我在公司里就是直接改源码:
avalon.ready = function(fn) {
if (innerRequire) {
innerRequire("ready!", fn)
} else if (fireReady === noop) {
fn(avalon)
readyList.push(fn)
avalon.config({
loader: false
或者直接在源码里AMD加载器这个模块删掉,这样可以减少300行代码
/*********************************************************************
**********************************************************************/
var innerRequire
var modules = avalon.modules = {
"ready!": {
exports: avalon
"avalon": {
exports: avalon,
innerRequire.checkDeps = checkDeps
/*********************************************************************
**********************************************************************/
如果你也用require.js,那么avalon自带的DOMReady模块也可以省掉。这时,你们可以引用。此JS是基于avalon.js改造而来,你也可以模仿一下改造avalon.mobile.js。
如果你只支持最新的chrome浏览器,比如chrome36,那么你可以使用基于Promise, Object.observe 高级API冶造的,它使用全新的编译器与监听机制,其性能是目前所有MVVM框架之首!
最后我们结合, ,,,做一个简单的项目吧。
我们建立一个新项目,结构如下:
其中modules文件是放置不同的业务模块,可能不同的模块由不同的人来说,每个人管好自己的js、html、 css,因此我们才需要requirejs的text、css插件。vendor是放置第三方JS库、CSS库什么的,main.js为入口文件,特意与index.html放在醒目的位置。
注意,我们需要禁用avalon自带的加载器。
index.html的内容如下:
&!DOCTYPE html&
&title&第一个avalon项目&/title&
&meta charset="UTF-8"&
&meta name="viewport" content="width=device-width"&
&script src="vendor/require/require.js" data-main="main.js"&&/script&
.ms-controller{
visibility:
&body ms-controller="root"&
&div&{{header | html}}&/div&
&div ms-include-src="page"&&/div&
&div&{{footer}}&/div&
里面有许多奇怪的属性,不要慌,这是的绑定属性,后面的章节我们慢慢讲。之于requirejs的用法,自己到官网看。
然后是main.js,它大体分为三大块:
require.config({//第一块,配置
baseUrl: '',
jquery: 'vendor/jquery/jquery-2.1.1',
avalon: "vendor/avalon/avalon",//必须修改源码,禁用自带加载器,或直接删提AMD加载器模块
text: 'vendor/require/text',
domReady: 'vendor/require/domReady',
css: 'vendor/require/css.js'
priority: ['text', 'css'],
exports: "jQuery"
exports: "avalon"
require(['avalon', "domReady!"], function() {//第二块,添加根VM(处理共用部分)
avalon.log("加载avalon完毕,开始构建根VM与加载其他模块")
avalon.templateCache.empty = " "
avalon.define({
$id: "root",
header: "这是根模块,用于放置其他模块都共用的东西,比如&b&用户名&/b&什么的",
footer: "页脚消息",
page: "empty"
avalon.scan(document.body)
require(['./modules/aaa/aaa'], function() {//第三块,加载其他模块
avalon.log("加载其他完毕")
然后每一个模块里都有其JS文件与模板文件(CSS的引入以后再说)
&div ms-controller="aaa"&
&input ms-duplex="username"/&{{username}}
define(["avalon", "text!./aaa.html"], function(avalon, aaa) {
avalon.templateCache.aaa = aaa
avalon.define({
$id: "aaa",
username: "司徒正美"
avalon.vmodels.root.page = "aaa"
然后大家运行服务器,就能看到效果(推荐用netBeans,可以直接右键运行)
注意,这不是一个简单的玩具级helloworld!这是一个工业级的项目的种子原型,以后我们所有项目都可以根据它进行改造,最后用rjs进行合并压缩!
最近附上!
本站专栏文章皆为原创,转载请注明出处(带有 前端乱炖 字样)和本文的显式链接(),本站和作者保留随时要求删除文章的权利!
添加了一枚【评注】:暴露
添加了一枚【评注】:这种是不是就是单页应用的基础
添加了一枚【评注】:?
添加了一枚【评注】:avalon.shim.js 1.5.1只去掉了AMD loader,DOMReady没有去掉
赞了此文章!
赞了此文章!
添加了一枚【评注】:mark
你发的帖子的地址不知道怎么没法查看了,记得之前可以查看的,可以给个新地址么
添加了一枚【评注】:avalon
加载顺序有什么严格要求吗
我引用js的位置放在&/body&&/html&之间 什么效果都不能实现 放在&/head&&body&之间就好 这是为什么呢
添加了一枚【评注】:这是什么?
赞了此文章!
添加了一枚【评注】:至于
写了篇文章,介绍avalon后端渲染解决方案,采用nodejs +phantomjs中间件。
不足之处望大家指出
添加了一枚【评注】:执行没有问题。
但是Chrome下面会出报下述错误
=================================
Uncaught Error: require方法的第一个参数应为数组 ready!
添加了一枚【评注】:233
添加了一枚【评注】:链接打不开啊打不开。
添加了一枚【评注】:WPF
赞了此文章!
请问,代码的单引号和双引号使用有什么讲究吗?
赞了此文章!
添加了一枚【评注】:我不要我不要
添加了一枚【评注】:傻逼
添加了一枚【评注】:1111
avalon-master/examples/tree.html
示例里的多层repeat
如何传参数给下一级 或者有什么方法能得知所属的层数?
赞了此文章!
赞了此文章!
添加了一枚【评注】:mark
添加了一枚【评注】:adf
赞了此文章!
修正一下onionui地址
赞了此文章!
赞了此文章!
添加了一枚【评注】:mark
赞了此文章!
添加了一枚【评注】:123
添加了一枚【评注】:123
添加了一枚【评注】:5
赞了此文章!
这个只能在Firefox上显示正常,别的浏览器都兼容啊
jquery: 'vendor/jquery/jquery-2.1.1',
avalon: "vendor/avalon/avalon",//必须修改源码,禁用自带加载器,或直接删提AMD加载器模块
text: 'vendor/require/text',
domReady: 'vendor/require/domReady',
css: 'vendor/require/css.js'
最后一行代码中的css.js是不是多写一个.js
priority: ['text', 'css'],
这一句是什么意思?
笔者改过了么,为啥我看到的是“angular之所有崛起,一个很大的原因”,改的也真是逗。
赞,辛苦了。
“angular之没有崛起,一个很大的原因”, 应该是笔误,正确的应该是“angular之所以崛起,一个很大的原因”
泪奔啊,点赞~~~正美辛苦了~~
编辑器好熟悉!
WRITTEN BY
PUBLISHED IN
本专栏其他文章
浏览:795赞:0
浏览:9729赞:4
浏览:9535赞:2
浏览:11085赞:2
浏览:14161赞:3
浏览:22201赞:3}

我要回帖

更多关于 avalonjs官网 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信