javascript - 如何定义使用先前值确定 Knockout 类的自定义绑定(bind)?

标签 javascript knockout.js

我需要用 knockout 绑定(bind)一个表格,如果新值高于或低于前一个值,我希望表格单元格获得不同的 css 类。

我想到了不同的可能性,例如将以前的值存储在 bindingContext 中并有一个返回正确类的函数,但是是否可以添加一个自定义绑定(bind)处理程序来接收以前的值和新值?

最佳答案

尽管Jeff的和Sławomir的答案是可行的,我找到了一个替代方案,它不需要对 View 模型进行任何更改,也不依赖于更改 DOM 元素对象。

function subscribeToPreviousValue(observable, fn) {
  observable.subscribe(fn, this, 'beforeChange');
}

ko.bindingHandlers['bindingWithPrevValue'] = {
  init: function (element, valueAccessor) {
    var observable = valueAccessor();
    var current = observable();

    console.log('initial value is', current);

    subscribeToPreviousValue(observable, function (previous) {
      console.log('value changed from', previous, 'to', current);
    });
  }
};

当然,这只有在绑定(bind)属性是可观察的情况下才有效。

关于javascript - 如何定义使用先前值确定 Knockout 类的自定义绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055726/

相关文章:

javascript - indexeddb 调用堆栈出现无效状态错误?

javascript - 是否可以将回调附加到委托(delegate)事件监听器 (.on()) 的设置?

JavaScript:强制 IE 打开新选项卡而不是窗口?

javascript - Codemirror- linting - 是否有明确触发 linting 的事件?

javascript - knockout.js cleanNode 是否删除所有关联的事件监听器?

javascript - 如何根据 beforesend() 函数的返回值更改 ajax 函数的 url?

javascript - 从嵌套 <ul> 列表项中删除表行

knockout.js - 如何组合来自不同 HTML 文件的模板

javascript - Knockout js 应用程序的正确文件结构是什么?

javascript - KnockoutJS observableArray 在通知订阅者之前是否会区分新旧数组?