我认为我有一个关闭问题,但我很难尝试解决它。 我认为使用$ .map会阻止任何问题。
请参阅下面的javascript(需要使用Zepto或jQuery)或访问工作代码https://jsfiddle.net/rowcp07n/4/:
"use strict";
var log = function(){
var output = document.getElementById('output');
for(var i in arguments){
output.append(JSON.stringify(arguments[i]));
output.appendChild(document.createElement('br'));
output.appendChild(document.createElement('hr'));
}
};
function EmptyAction(){
self = this;
self.play = function(){
self.complete();
};
};
function Scene(row, i){
log('Constructing Scene '+i);
var self = this;
self.index = i;
self.steps = $.map(row, function(col, i){
return new SceneStep(row[i], self, i);
});
}
function SceneStep(col, scene, i){
log('Constructing SceneStep '+i+' for Scene '+scene.index);
var self = this;
self.index = i;
self.action = new EmptyAction();
self.action.parentStep = self;
self.action.complete = function(){
log('Complete handler for SceneStep '+ self.index);
};
self.value = col;
}
var data = [
[1,2,3],
[4,5,6],
[7,8,9]
];
function ViewModel(data){
var self = this;
self.scenes = $.map(data, function(row, i){
return new Scene(row, i);
});
}
var vm = new ViewModel(data);
log('Triggering complete of 0-0');
vm.scenes[0].steps[0].action.complete();
log('calling play() of 0-0');
vm.scenes[0].steps[0].action.play();
我希望在日志结束时看到“SceneStep 0的完整处理程序” 但我得到“SceneStep 2的完整处理程序”
有人能指出我缺少的东西吗?
答案 0 :(得分:0)
正如@JJJ指出的那样,我忘了在类EmptyAction中声明var self。