Knockout.js 未调用knockoutjs custombindings更新方法

Knockout.js 未调用knockoutjs custombindings更新方法,knockout.js,Knockout.js,更新我已将代码移动到JSFIDLE 调用edit时,将模型设置为视图模型,并打开对话框。但是,当调用save或undo时,模式设置为null,但对话框不会关闭 如果我在jqDialog处理程序中显式地使用jquery来关闭对话框中的cancel链接和ajax complete事件,我就可以做到这一点,但这感觉有点不对劲,因为jqDialog.update应该管理打开/关闭 调用似乎没有开始转发到jqDialog.update()。但我不确定这是在哪里被阻止的。是的,我上面所说的实际上就是问题所在

更新我已将代码移动到JSFIDLE

调用
edit
时,将模型设置为视图模型,并打开对话框。但是,当调用
save
undo
时,模式设置为null,但对话框不会关闭

如果我在jqDialog处理程序中显式地使用jquery来关闭对话框中的cancel链接和ajax complete事件,我就可以做到这一点,但这感觉有点不对劲,因为
jqDialog.update
应该管理打开/关闭


调用似乎没有开始转发到
jqDialog.update()
。但我不确定这是在哪里被阻止的。

是的,我上面所说的实际上就是问题所在。在您的
with
中,可观察对象已被展开,因此您只需处理
设置ShipmentDate.workOrder
的内容。自定义绑定不知道持有它的实际可观察对象

一个简单的解决方法就是这样写:

<!-- ko with: SettingShipmentDate.workOrder -->
<div data-bind="jqDialog: $parent.SettingShipmentDate.workOrder, dialogOptions: {close: $root.SettingShipmentDate.undo}" data-title="Set Shipment Date">

现在,您的绑定被传递到可观察的
workOrder
,而不仅仅是它的内容,并且您在绑定的
update
函数中执行的展开将能够创建依赖项

样本:


否则,您可以稍微重构它,将
with
语句移动到
div
或其内部。尽管如此,带的
当前正在防止值为null。

可能有助于在JSFIDLE中实现这一点。我对元素周围有
jqDialog
绑定的区域感兴趣
$data
通常已经展开,因此您的
update
函数实际上没有获得对您的可观察对象的依赖,因此它没有被触发。@RPNiemeyer查看udpate以获取指向实时示例的链接。这解决了一个问题,但引入了另一个问题。如果第一次单击按钮,但第二次单击时将打开多个对话框。但我无法解释为什么。而且整个语法感觉冗长。我开始考虑我的方法是否是有缺陷的,我需要重新思考编辑BIDENG.jQueUI对话框将DIV托管到对话框的底部,因此当KokOutt重新赋予<<代码> 区域时,它不会删除对话框的div,因此不会触发处理代码。这里有一种通过在close上处理对话框来处理这个问题的方法:哇,我从来没有想到jquerydom操作会扭曲KO绑定。