在 knockout.js 的订阅函数中获取事件

Get event in a subscribe function in knockout.js

我想知道是否可以在knockout.js的subscribe函数中获取event参数。

self.selectedOrder.subscribe(function(newValue, action) {
    shouter.notifySubscribers(newValue, "selectedOrder");
});

我有一个带行的 table,我想在用户单击某行以 select 时通知其他视图模型。

我需要 event 参数来获取 $(event.currentTarget) 元素并通过添加 CSS class 突出显示该行。

$(event.currentTarget).addClasss('selected').siblings().removeClass('selected');

想着直接用KO做,没找到合适的方法。好像不容易...

This was my try with KO。基本上:

data-bind="css: {'selected':  $parent.selectedUser().id == id}"

当然,当 selectedUser 为 null 时抛出错误。

在阅读 this article 关于 防止空对象 之后,我只是觉得 KO 对于这个任务并不像 jQuery 那么容易。所以我相信在这种情况下我会选择传统的 jQuery,因为它非常简单。

问题是,我仍然需要 event 对象。

Which of course, was throwing errors when selectedUser was null.

您可以通过在 ViewModel

上添加一个功能来非常简单地完成此操作
self.isSelected = function(id){
    return self.selectedUser() && self.selectedUser().id == id;   
}

以及对标记的简单更改:

<tr data-bind="click: $parent.selectRow, attr: {'id': id}, css: {'selected':  $parent.isSelected(id)}, clickBubble: false">
  here -----------------------------------------------------------------------^

已更新 fiddle:http://jsfiddle.net/vhwk1gvy/10/