knockoutjs函数参数排序

时间:2014-06-26 08:56:02

标签: knockout.js

我想要一些关于敲除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) {}

我是否理解正确的判决顺序?

2 个答案:

答案 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…}...

http://jsfiddle.net/nWm5J/