Knockout.js 在模态对话框中取消单击绑定异常 样本1-功能性断裂
在此Durandal 2.0.1视图中,单击处理程序不会触发Knockout.js 在模态对话框中取消单击绑定异常 样本1-功能性断裂,knockout.js,durandal,Knockout.js,Durandal,在此Durandal 2.0.1视图中,单击处理程序不会触发 <div class="messageBox"> <form class="form-inline" data-bind="submit: commit"> <div class="modal-header"> <h3>Upload item</h3> </div> <div class="modal-body">
<div class="messageBox">
<form class="form-inline" data-bind="submit: commit">
<div class="modal-header">
<h3>Upload item</h3>
</div>
<div class="modal-body">
<section>
<fieldset class="main">
... (lots of data bound fields) ...
</fieldset>
</section>
</div>
<div class="modal-footer">
<button class="btn btn-primary button" data-bind="click: commit">OK</button>
<button class="btn button" data-bind="click: rollback">Cancel</button>
</div>
</form>
</div>
上传项目
... (大量数据绑定字段)。。。
好啊
取消
相反,表单提交处理程序启动,没有给出单击哪个按钮的指示
样本2-目视断裂
在此示例中,唯一的区别是按钮位于body div而不是footer div中。在这种情况下,按钮单击处理程序确实会启动,但按钮的位置不正确,UI看起来很糟糕
<div class="messageBox">
<form class="form-inline" data-bind="submit: commit">
<div class="modal-header">
<h3>Upload item</h3>
</div>
<div class="modal-body">
<section>
<fieldset class="main">
... (lots of data bound fields) ...
<button class="btn btn-primary button" data-bind="click: commit">OK</button>
<button class="btn button" data-bind="click: rollback">Cancel</button>
</fieldset>
</section>
</div>
<div class="modal-footer">
</div>
</form>
</div>
上传项目
... (大量数据绑定字段)。。。
好啊
取消
在Durandal网站上的对话框示例中,有一个绑定到表单提交和按钮单击的“确定”处理程序,如这里的示例视图所示。我花了很长时间才发现触发的不是按钮单击事件,而是表单提交事件
我需要在页脚中放置按钮以获得正确的布局,但我需要触发单击事件,以便知道用户单击的是确定还是取消。我可以显式地为这两个按钮绑定onclick=“commit”和onclick=“rollback”,但这是。。。真讨厌
当它们在页脚时,是什么弄脏了绑定?我能做些什么?从评论到原始帖子的回答:
正常情况下,单击提交绑定中的绑定应正确触发,如本例所示,基于发布的代码:
如果您有一个rogue ko注释,或其他一些更改绑定范围的标记,可能在标记为:
。。。(大量数据绑定字段)
这可能会干扰对click:commit
和click:rollback
的两个绑定,因为它可能无法找到这些绑定。换句话说,您正试图绑定到的commit
函数可以通过submit:commit
绑定访问,但中间的某些内容会导致单击:commit
绑定无法访问该函数
如果单击
绑定找不到提交
和回滚
,则单击这些按钮将返回到提交
绑定,该绑定恰好绑定到提交
。此处显示了此回退行为,单击按钮将启动commit
功能:
这种行为也可能是由于绑定到模型上不存在的属性而导致的。按钮位于页面末尾,最后处理。遇到无效绑定时,预处理停止;这是在处理按钮之前,因此没有任何单击处理程序绑定到按钮。这就是为什么将它们移到身体的起始处会使它们开始工作。我试图用小提琴再现这一点,但似乎效果很好:-也许你可以休息一下,然后这会导致你的问题?你需要提交绑定吗?你能自己使用点击绑定吗?我试过你的小提琴,搔了搔头,删除了表单提交,不再修改了。注释掉了“大量输入”。。。确定/取消开始工作。取消注释输入。。。确定/取消继续工作。我想我会在一个黑暗的角落里哭泣。也许你在“大量输入”部分有一些ko注释,或者类似的注释,这意味着“提交”和“回滚”的绑定试图在数据绑定项之一上启动,而不是在父视图模型上?请参阅此示例:-在这里它找不到“commit2”和“rollback2”绑定,所以它转而使用“submit”绑定?如果是这样,您可以尝试“$parent.commit”,这可能对您有效,这完全取决于您绑定到的结构。是的,我刚刚找到它。这就是罪魁祸首:当我取消注释时,实际的注释变成了纯文本并停止了删除。把它作为一个答案贴出来,你的分数就归你了,因为你已经把它标对了。