【发布时间】:2015-04-29 20:26:22
【问题描述】:
我的绑定:
<!-- ko if: $root.sArea() != null -->
...
<a href="#" class="btn addRemove" data-bind="click: $root.editQuestion">Edycja</a>
...
<!-- /ko -->
结果是:
<a href="#" class="btn addRemove" data-bind="click: $root.editQuestion" disabled="disabled">Edycja</a>
在第一个绑定标签上没有禁用属性,但在第二个和后续标签上已经有。
为什么淘汰赛增加了禁用属性?
我在解决方案中找到了这段代码
function EnableButtons(enable) {
if (enable)
$(".btn, .button").removeAttr("disabled", "disabled");
else
$(".btn, .button").attr("disabled", "disabled");
}
被触发两次,参数第一个为 false,第二个为 true,当 knokcout 重新绑定数据时,他以某种方式“记住”禁用属性并将其放入 html 标记。当调用重新绑定时,html 中没有禁用
好的,函数 EnableButtons 在 ajax 调用之前触发,在 jquery 全局事件中
$(document).ajaxStart(function () {
...
EnableButtons(false);
});
在 ajax 完成工作之后:
$(document).ajaxComplete(function () {
...
EnableButtons(true);
});
但在成功的 ajax 请求中,我在 observable 中调用重新绑定数据。
结论:
- 在ajax调用之前所有按钮都被禁用=""disabled",
- 在 ajax 成功时重新绑定并且按钮状态仍处于禁用状态。
- 最后,当 ajax 完成时,按钮状态更改为“启用”
- 现在当 ja 调用 rebindind data 但我没有调用 ajax 时,我的按钮将状态更改为禁用,为什么?
看起来淘汰赛已经缓存了 html DOM。 如果我在功能 ajax 成功中手动启用按钮,那么一切正常
【问题讨论】:
-
您必须发布重现您的问题的代码。 The code as posted currently does not reproduce it.
-
EnableButtons fn 似乎添加了禁用。更改或删除锚点上的 btn 类名。
-
如果可能,请在示例代码中添加一个 jsfiddle。
标签: knockout.js