我想要一些关于敲除js方法绑定中的参数排序的确认
情况A:如果我只发送$ data和event,那么第一个参数是数据,第二个参数是dom事件<a data-bind="click: $root.myFunction.bind($data)" href="#">Add Sheet</a>
self.myFunction = function (data, event) {}
情况B:如果我发送额外的参数,那么$ data成为myFunction中的最后一个参数,而myparam保存“funnyworld”的值
<a data-bind="click: $root.myFunction.bind($data,'funnyworld')" href="#">Add Sheet</a>
self.myFunction = function (myparam, data) {}
我是否理解正确的判决顺序?
答案 0 :(得分:3)
情况A:
$root.myFunction.bind($data)
会导致this
中的myFunction
成为当前的视图模型($data
)。通常的参数也将由Knockout传递,因此你的参数实际上是:
self.myFunction = function (arg1, arg2) {
// this === $data
// arg1 === $data
// arg2 === event
}
情况B:
$root.myFunction.bind($data, 'funnyworld')
还会导致this
中的myFunction
成为当前的视图模型($data
),但也会生成第一个参数'funnyworld'
:
self.myFunction = function (arg1, arg2, arg3) {
// this === $data
// arg1 === 'funnyworld'
// arg2 === $data
// arg3 === event
}
请参阅MDN
答案 1 :(得分:1)
<a data-bind="event: { 'click': myFunction.bind($data, 'param1', 'param2') }" href="#">Add Sheet</a>
var vm = {
myFunction: function (firstParam, secondParam, data, e) {
console.log(firstParam);
console.log(secondParam);
console.log(data);
console.log(e);
}
};
ko.applyBindings(vm);
控制台将打印:
param1
param2
Object {myFunction: function}...
MouseEvent {dataTransfer: null, toElement: a, fromElement: null, y: 15, x: 46…}...