【问题标题】:Get event in a subscribe function in knockout.js在 knockout.js 的订阅函数中获取事件
【发布时间】:2015-10-01 18:33:22
【问题描述】:

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

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

我有一个包含行的表,我想在用户单击一行以选择它时通知其他视图模型。

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

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

本来想直接用 KO 做的,但是没找到合适的方法。这似乎并不容易......

This was my try with KO。基本上:

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

当然,当selectedUser 为空时会引发错误。

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

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

【问题讨论】:

  • 试试css: {'selected': $parent.selectedUser() && $parent.selectedUser().id == id}。此外,在self.editName = function(data, e) { 中,您将event 作为e 参数。

标签: knockout.js knockout-3.0


【解决方案1】:

当然,当 selectedUser 为 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 -----------------------------------------------------------------------^

更新小提琴:http://jsfiddle.net/vhwk1gvy/10/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2020-11-11
    • 1970-01-01
    相关资源
    最近更新 更多