Magento 在knockoutjs呈现后,是否有一种只知道绑定上下文就可以运行代码的方法?

Magento 在knockoutjs呈现后,是否有一种只知道绑定上下文就可以运行代码的方法?,magento,knockout.js,binding,render,Magento,Knockout.js,Binding,Render,我正在CMS后端开发一个模块。我试图“钩住”它们的击倒绑定,并在它们完成渲染后运行代码。到目前为止,我运气不好 然而,我附加了不同的数据组件并获得了淘汰数据 我有过很多失败的尝试,但到目前为止,我有一个返回绑定上下文的方法 var bindingContext = ko.contextFor(jQuery('div[data-component="customer_form.areas"]').get(0)); 有没有人知道我可以用这个方法连接一个观察者来观察渲染的完成?我是管理员,我是新手。

我正在CMS后端开发一个模块。我试图“钩住”它们的击倒绑定,并在它们完成渲染后运行代码。到目前为止,我运气不好

然而,我附加了不同的数据组件并获得了淘汰数据

我有过很多失败的尝试,但到目前为止,我有一个返回绑定上下文的方法

var bindingContext = ko.contextFor(jQuery('div[data-component="customer_form.areas"]').get(0));
有没有人知道我可以用这个方法连接一个观察者来观察渲染的完成?我是管理员,我是新手。我没有创建视图模型,也没有创建模板。我不能像我认为应该做的那样将afterRender添加到模板中。

如您所说,这应该使用
afterRender
完成。所有其他方法都会让人感觉不舒服,因为你永远不知道knockout何时会重新呈现(部分)ui

我想不出你为什么需要这样的工作,但我该评判谁呢

我能想到的唯一方法是使用
MutationObserver
。下面是一个例子:

var bindingContextElement=document.querySelector(“ul”);
var renderThrottle=300;
var renderCycle=null;
var onRenderComplete=函数(){
var pre=document.createElement(“pre”);
var msg=new Date().toLocaleString()+“:已完成渲染”;
pre.appendChild(document.createTextNode(msg));
文件.正文.附件(pre);
}
//观察元素的突变,300毫秒无突变后调用RenderComplete
var观察者=新的突变观察者(功能(突变){
clearTimeout(renderCycle);
renderCycle=setTimeout(在RenderComplete、RenderRottle上);
});
变量配置={
儿童名单:对
};
observer.observe(bindingContextElement,config);
ko.applyBindings({
项目:ko.observableArray([1,2,3])
});

添加
如您所说,这应该使用
后渲染
完成。所有其他方法都会让人感觉不舒服,因为你永远不知道knockout何时会重新呈现(部分)ui

我想不出你为什么需要这样的工作,但我该评判谁呢

我能想到的唯一方法是使用
MutationObserver
。下面是一个例子:

var bindingContextElement=document.querySelector(“ul”);
var renderThrottle=300;
var renderCycle=null;
var onRenderComplete=函数(){
var pre=document.createElement(“pre”);
var msg=new Date().toLocaleString()+“:已完成渲染”;
pre.appendChild(document.createTextNode(msg));
文件.正文.附件(pre);
}
//观察元素的突变,300毫秒无突变后调用RenderComplete
var观察者=新的突变观察者(功能(突变){
clearTimeout(renderCycle);
renderCycle=setTimeout(在RenderComplete、RenderRottle上);
});
变量配置={
儿童名单:对
};
observer.observe(bindingContextElement,config);
ko.applyBindings({
项目:ko.observableArray([1,2,3])
});


添加
提供多个子绑定节点的父节点是否会导致在每个节点上触发此操作?我正在测试我的一位最年长的父母,试图捕捉孩子的更新,但onRenderComplete并没有启动。我只是阅读了文档,就像你说的。子树:true使其激发。出色的工作。我知道这是一件骇人听闻的事情,但有时使用CMS意味着您无法覆盖核心或中断CI/升级周期。提供多个子绑定节点的父节点是否会导致在每个节点上触发此事件?我正在测试我的一位最年长的父母,试图捕捉孩子的更新,但onRenderComplete并没有启动。我只是阅读了文档,就像你说的。子树:true使其激发。出色的工作。我知道这是一件骇人的事情,但有时使用CMS意味着你无法覆盖核心或打破CI/升级周期。