Javascript 如何在第一次渲染后通知foreach中的更新项?

Javascript 如何在第一次渲染后通知foreach中的更新项?,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我正在尝试创建自定义foreach绑定,但无法正确截获更新事件。此自定义绑定称为“测试” 这是标记 <ul data-bind='test: collection'> <li> <button data-bind='text: caption, click: $parent.callback'></button> </li> </ul> 这是定制装订 ko.bindingHandlers.t

我正在尝试创建自定义foreach绑定,但无法正确截获更新事件。此自定义绑定称为“测试”

这是标记

<ul data-bind='test: collection'>
    <li>
        <button data-bind='text: caption, click: $parent.callback'></button>
    </li>
</ul>
这是定制装订

ko.bindingHandlers.test = {
    init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
      return ko.bindingHandlers.foreach.init(element, valueAccessor, allBindings, viewModel, bindingContext);
    },

    update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
      var value = ko.utils.unwrapObservable(valueAccessor());
      //console.log(element);

      var newValue = function(){
        return {
          data: value,
          afterRender: function(element, index, data) {
              if (index.active) {
                  $(element).css('color', 'green');
              }
          }
        }
      }

      ko.bindingHandlers.foreach.update(element, newValue, allBindings, viewModel, bindingContext);
    }
};
我想在项目的活动标志变为TRUE时更改项目的颜色,但更新回调仅在初始化步骤中调用。如何做到这一点


你的小提琴有一些问题-

  • newValue是一个函数,但在初始加载后从未调用或计算过

  • observableArray中的observableArray不会在observableArray上的属性发生更改时通知observableArray

  • 在元素的属性定义中使用“内部”不兼容跨浏览器(查看IE)

  • 活跃在你的小提琴中是不可见的,当它的价值发生变化时,永远不会通知任何人

  • 另外,一般来说,这里的关注点是混合的——使用CSS应用样式,使用视图模型控制视图逻辑,使用数据绑定更新元素

    注意CSS

    .active {
        color: green;
    }
    

    为什么要在这里定制装订?似乎您希望跟踪
    活动的
    ,并在该属性的值更改时进行UI更改。这听起来像是可观测属性的完美候选者。您可以使
    活动
    可见,并使用
    css
    绑定:(或
    style
    绑定)@AndrewWhitaker您是对的。事实上,我已经简化了一个更复杂的场景,所以就拿这个小例子作为一个案例研究吧。谢谢,我的主要问题是#2
    .active {
        color: green;
    }