Knockout.js 在模态对话框中取消单击绑定异常 样本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">

在此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">
      <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”,这可能对您有效,这完全取决于您绑定到的结构。是的,我刚刚找到它。这就是罪魁祸首:当我取消注释时,实际的注释变成了纯文本并停止了删除。把它作为一个答案贴出来,你的分数就归你了,因为你已经把它标对了。