仍在继续了解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);
答案 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;