watch.js is going nuts
watch.js is going nuts
使用watch.js.的浏览器端版本
在html头中:
<script type="text/javascript" src="S/watch.js"></script>
在javascript中:
var here={'now':'somewhere'}
watch(here,['now'],function(){
console.log('home changed: '+here.now);
});
here.now='somewhere else';
我得到这个错误循环一遍又一遍:
未捕获类型错误:无法读取未定义watch.js:345的属性"undefined"
错误显示来自这里-watch.js代码:
var loop = function(){
for(var i in lengthsubjects){
var subj = lengthsubjects[i];
var difference = getObjDiff(subj.obj[subj.prop], subj.actual); <-watch.js:345
为什么会发生这种情况?
更新
即使我什么都不看,只把脚本添加到头上,它仍然会出现同样的错误。
固定
在循环函数中包装这个中的所有内容
if(lengthsubjects.length!==0){}
因为如果你做console.dir(lengthsubjects);
你得到:
length: 0,
__proto__: Array[0]
这是watch.js从第340-360:行的更改
var loop = function(){
if(lengthsubjects.length!==0){
for(var i in lengthsubjects){
//
var subj = lengthsubjects[i];
var difference = getObjDiff(subj.obj[subj.prop], subj.actual);
if(difference.added.length || difference.removed.length){
if(difference.added.length){
for(var j in subj.obj.watchers[subj.prop]){
watchMany(subj.obj[subj.prop], difference.added, subj.obj.watchers[subj.prop][j], subj.level - 1, true);
}
}
callWatchers(subj.obj, subj.prop, "differentattr", difference, subj.actual);
}
subj.actual = clone(subj.obj[subj.prop]);
}
}
};