Skip to content

Commit

Permalink
update scanCallback
Browse files Browse the repository at this point in the history
  • Loading branch information
RubyLouvre committed Nov 12, 2014
1 parent e30cb79 commit 6fe8724
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 16 deletions.
34 changes: 20 additions & 14 deletions avalon.js
Original file line number Diff line number Diff line change
Expand Up @@ -1973,33 +1973,41 @@
/*********************************************************************
* 扫描系统 *
**********************************************************************/
var scanFns = []
avalon.scanAll = function(fn, id) {
fn.id = id
scanFns.push(fn)
var scanObject = {}
avalon.scanCallback = function(fn, group) {
group = group || "$all"
var array = scanObject[group] || (scanObject[group] = [])
array.push(fn)
}
avalon.scan = function(elem, vmodel) {
avalon.scan = function(elem, vmodel, group) {
elem = elem || root
group = group || "$all"
var array = scanObject[group] || []
var vmodels = vmodel ? [].concat(vmodel) : []
var scanIndex = 0;
var scanAll = false
var fn
var dirty = false
function cb(i) {
scanIndex += i
dirty = true
setTimeout(function() {
if (!scanIndex && !scanAll) {
scanAll = true
for (var i = scanFns.length; i >= 0; i--) {
var fn = scanFns[i]
if (fn.id ? avalon.vmodels[fn.id] : true) {
fn()
scanFns.splice(i, 1);
}
while (fn = array.shift()) {
fn()
}
}
})
}
vmodels.cb = cb
scanTag(elem, vmodels)
//html, include, widget
if (!dirty) {
while (fn = array.shift()) {
fn()
}
}
}

//http://www.w3.org/TR/html5/syntax.html#void-elements
Expand Down Expand Up @@ -2216,10 +2224,8 @@
if (!stopScan[elem.tagName] && rbind.test(elem.innerHTML.replace(rlt, "<").replace(rgt, ">"))) {
scanNodeList(elem, vmodels) //扫描子孙元素
}
break;
break
}


}
//IE67下,在循环绑定中,一个节点如果是通过cloneNode得到,自定义属性的specified为false,无法进入里面的分支,
//但如果我们去掉scanAttr中的attr.specified检测,一个元素会有80+个特性节点(因为它不区分固有属性与自定义属性),很容易卡死页面
Expand Down
5 changes: 4 additions & 1 deletion examples/class1.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<head>
<title>ms-class</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="avalon.shim.js"></script>
<script src="../avalon.js"></script>
<style>
.ms-class div{
display:inline-block;
Expand All @@ -28,6 +28,9 @@
}
</style>
<script type="text/javascript">
avalon.scanAll(function(){
console.log("ok")
})
var model = avalon.define({
$id: "test",
w: 500,
Expand Down
2 changes: 1 addition & 1 deletion examples/duplex1.html
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ <h3 style="text-align: center">ms-duplex</h3>
<input ms-duplex="textModel" ms-data-duplex-observe="radioModel"/>
<input ms-duplex="passwordModel" type="password"/>

<input type="radio" ms-duplex="radioModel"> <input type="checkbox" ms-duplex-radio="checkRadio">
<input type="radio" ms-duplex-checked="radioModel"> <input type="checkbox" ms-duplex-checked="checkRadio">
<select ms-duplex="selectModel">
<option value="aaa" selected>aaa</option>
<option value="bbb">bbb</option>
Expand Down

0 comments on commit 6fe8724

Please sign in to comment.