Knockout在渲染视图之前调用subscribe函数

时间:2018-06-05 16:22:48

标签: knockout.js knockout-2.0 knockout-3.0

当与beforechange param一起使用时,Knockout在渲染视图之前调用subscribe函数,即使没有arrayChange属性。

我创建了JSfiddle,因为StackOverflow忽略了JavaScript代码中的debugger;关键字,这是查看此行为的最简单方法。 JSfiddle

有没有办法让KnockOut在渲染后发出调用订阅函数的信号?

我需要使用subscribe执行此操作,它由自定义绑定使用,不能由afterRender或类似的视图处理函数调用。

1 个答案:

答案 0 :(得分:0)

您可以在视图模型上公开一个方法来创建订阅,然后在调用ko.applyBindings后在vm上调用它:

function ViewModel(){
    var self = this;

    this.items = ko.observableArray([]);
    this.push = function(){
      self.items.push((Math.random(10)*10).toFixed(0));
      console.log("PUSH");
    }

    this.subscribeAfterApply = function(){
      this.items.subscribe(changes=>{
        console.log("SUBSCRIPTION FIRED");
      }, null, "arrayChange");
      console.log("SUBSCRIBED");
    }
}

var vm = new ViewModel();

ko.applyBindings(vm);
vm.subscribeAfterApply();