Knockout.js 在呈现视图之前,Knockout调用subscribe函数

Knockout.js 在呈现视图之前,Knockout调用subscribe函数,knockout.js,knockout-2.0,knockout-3.0,Knockout.js,Knockout 2.0,Knockout 3.0,当与arrayChangeparam一起使用时,Knockout在呈现视图之前调用subscribe函数,即使没有beforechange属性 我创建了JSFIDLE,因为StackOverflow忽略了调试器关键字,这是查看此行为的最简单方法。 有没有办法在渲染后发出信号敲除以调用subscribe函数 我需要对subscribe执行此操作,它由自定义绑定使用,不能由afterRender或类似的视图处理函数调用。您可以在视图模型上公开一个方法来创建订阅,然后在调用ko.applyBindi

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

我创建了JSFIDLE,因为StackOverflow忽略了
调试器关键字,这是查看此行为的最简单方法。

有没有办法在渲染后发出信号敲除以调用subscribe函数


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

您可以在视图模型上公开一个方法来创建订阅,然后在调用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();

我无法重现你描述的行为。运行小提琴时,不会记录任何内容。按“推送”时,控制台首先记录
订阅
,然后记录
推送
(如您所料)。请使用Chrome web浏览器或任何其他支持
调试器的浏览器关键字。当按下“PUSH”时,调试器将在subscribe步骤上保持,其中“subscribe”被打印出来,但是
items
元素尚未呈现。您好,这实际上并不能解决我的问题,因为我需要在全局使用的自定义绑定中调用它。但是它给了我思考的方向,所以非常感谢你!