所以我有一个main函数,它应该验证我们是否有权执行回调函数。它在chrome和opera上运行良好,但我无法弄清楚如何在Firefox中获取事件参数。
Here's a working example (jsfiddle),尝试在firefox上执行它将返回:
ReferenceError:未定义事件
HTML:
<button data-bind="click: validation.bind($data,true,callback,'callback_param1_because_of_reasons',event)" id="test">
test
</button>
JS:
var ViewModel = function () {
this.validation = function(param1, callback){
var do_validations = param1;
if(do_validations){
var parameters_a = [];
$.each(arguments,function(key,val){
if(typeof val != "undefined"){
parameters_a.push(val);
}
});
//Executa el cb
parameters_a.splice(0,2);
callback.apply(this,parameters_a);
}
};
this.callback = function(param1, event){
event.preventDefault();
event.stopPropagation();
$(event.target).hide();
alert(param1+" ...everything's gonna be alright");
};
}
ko.applyBindings(new ViewModel());
对不起制表的麻烦。
答案 0 :(得分:2)
Knockouts click
或其他event
绑定将始终传递两个参数:
$data
和event
通过设置this
上下文(第一个参数)并附加传递的任何其他参数来绑定。 Knockout将尊重这些绑定参数,并在最后添加数据和事件。
这意味着您的侦听器功能的签名最后应包含data
和event
。因此,它可以修复bind
所需的参数数量,或者如果您想要不同的金额,则需要使用array
。
示例:
var vm = {
myListener: function(arg1, arg2, data, event) {
console.log("Arg 1:", arg1);
console.log("Arg 2:", arg1);
console.log("vm:", data);
console.log("event:", event.type);
}
}
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<button data-bind="click: myListener.bind(null, 'arg1', 'arg2')">click</button>