KnockoutJS函数的参数在未定义时返回viewModel

时间:2014-01-28 20:03:10

标签: javascript knockout.js

仍在继续了解KO。我有一个KO方法的参数,它在我传递一个显式值时有效但是当我调用没有args的函数时它没有给出

<button data-bind="click:LaterCall">click</button>


function InvoiceViewModel() {

    //Data
    var self = this;
    self.LaterCall = function (arg) {
        console.log(arg); // why is this not undefined????
    };

}
var viewModel = new InvoiceViewModel();
ko.applyBindings(viewModel);

http://jsfiddle.net/sajjansarkar/9TMv2/2/

2 个答案:

答案 0 :(得分:4)

Knockout的click绑定(和event绑定,click是其子集)将当前数据作为第一个参数传递,event为任何处理程序的第二个参数。

因此,在您的情况下,arg将等于您的viewModel

答案 1 :(得分:1)

参数arg将引用父级,您可以在示例中看到实际的viewmodel是父级。在那里放置一个参数主要用于你有嵌套控制器并想要动态引用父对象,如第二个例子中所述,http://knockoutjs.com/documentation/click-binding.html

<ul data-bind="foreach: places">
    <li>
        <span data-bind="text: $data"></span>
        <button data-bind="click: $parent.removePlace">Remove</button>
    </li>
</ul>

 <script type="text/javascript">
     function MyViewModel() {
         var self = this;
         self.places = ko.observableArray(['London', 'Paris', 'Tokyo']);

         // The current item will be passed as the first parameter, so we know which place to remove
         self.removePlace = function(place) {
             self.places.remove(place)
         }
     }
     ko.applyBindings(new MyViewModel());
</script>

我还建议你不要在javascript中使用self作为参数名称,而是转到that

var that = this;