avalon2
Version:
an elegant efficient express mvvm framework
79 lines (70 loc) • 2.11 kB
HTML
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<script type="text/javascript" src="./dist/avalon.js"></script>
</head>
<body>
<div id="aaa">
</div>
<script>
function heredoc(fn) {
return fn.toString().replace(/^[^\/]+\/\*!?\s?/, '').
replace(/\*\/[^\/]+$/, '').trim().replace(/>\s*</g, '><')
}
function getInnerHTML(el){
return el.innerHTML.toLowerCase().replace(/\s*class=""/,'')
}
var textProp = 'textContent' in document ? 'textContent': 'innerText'
function fireClick(el) {
if (el.click) {
el.click()
}else {
//https://developer.mozilla.org/samples/domref/dispatchEvent.html
var evt = document.createEvent('MouseEvents')
evt.initMouseEvent('click', true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
!el.dispatchEvent(evt);
}
}
var div = document.getElementById('aaa')
var expect = function(a){
return {
toBe: function(b){
console.log(a, b, a=== b)
}
}
}
div.innerHTML = heredoc(function () {
/*
<select ms-controller='attr3' ms-attr='{multiple:@a}'>
<option>000</option>
<option ms-attr='{selected:@b}'>111</option>
<option>222</option>
<option>333</option>
</select>
*/
})
vm = avalon.define({
$id: 'attr3',
a: true,
b: true
})
avalon.scan(div)
setTimeout(function(){
var opts = div.getElementsByTagName('option')
expect(div.children[0].multiple).toBe(true)
expect(opts[1].selected).toBe(true)
expect(div.children[0].type).toBe('select-multiple')
vm.a = false
vm.b = false
setTimeout(function () {
expect(div.children[0].multiple).toBe(false)
expect(div.children[0].type).toBe('select-one')
expect(opts[1].selected).toBe(false)
}, 100)
})
</script>
</body>
</html>