Ajax调用后,在Jquery .each循环中应用Knockout绑定
Apply Knockout bindings in Jquery .each loop after Ajax call
我有一堆元素应用到一个页面。它们是。ascx控件,每个控件都有特定的数据,但格式相同。
我需要为这些元素中的每个元素创建一个特定视图模型的删除绑定,以使它们正常工作。因此,目前我等待dom加载并循环遍历每个元素,应用一个新的绑定,如下所示:
$(function () {
var target;
$(".wrapper").each(function (index) {
target = this;
$.ajax({
url: getLink,
data: 'AllData',
async: false,
}).done(function (data) {
vm = new myViewModel(data);
ko.applyBindings(vm, target);
});
});
});
问题在于这个Ajax调用嵌套在.each循环的中间。如果我设置了async: false
,它会正确执行,但是感觉很慢,并且页面不允许许多其他交互工作,直到这个循环完成执行。如果我设置async: true
,当Ajax调用出去时,目标不断迭代所以当它返回时,所有这些绑定都应用到一个元素上我得到错误:You cannot apply bindings multiple times to the same element.
您需要确保target
是一个捕获的局部变量。您已经在.each()
循环之外声明了它,这意味着它正在被重用。你需要在循环中声明它:
$(function () {
$(".wrapper").each(function (index) {
var target = this; //change is here
$.ajax({
url: getLink,
data: 'AllData',
async: false,
}).done(function (data) {
vm = new myViewModel(data);
ko.applyBindings(vm, target);
});
});
});
在循环之外声明它意味着它在每次迭代中都被覆盖,所以当异步调用返回时,它们都试图绑定到相同的目标元素。
相关文章:
- 如何在foreach循环中对每个产品单独应用评级系统
- jQuery:如何在没有for循环的情况下将事件处理程序应用于$('#text'+'任意整数
- 在循环遍历对象 HTMLDivElement 时,应用 ChileNode 样式 zindex 在 firefox 和
- 谷歌应用程序脚本:如何修复循环将一个谷歌文档的段落插入另一个
- 在javascript for循环的迭代之间应用延迟
- GAE/Angular应用程序中window.init()上的无限循环
- Angular应用程序中FOR循环的意外行为
- if-else循环和jquery在热应用程序或冷应用程序中不起作用
- 弹出循环:添加数据时停止重复/三次应用/X
- 循环使用CSS规则遍历数组,并将它们应用于元素
- 编写脚本以循环遍历数组并为DOM元素应用值
- 应用函数javascript循环额外
- 使用Javascript SDK在Facebook应用程序上的无限登录循环
- 如何分解循环代码以创建大型应用程序
- 循环访问未显示在 Express 应用程序中的虚拟数据
- 将 DRY 应用于整个文件中的多个循环
- jquery循环遍历锚点以匹配悬停锚点类并应用css
- 无法对循环中的最后一项应用函数
- 将Node.js应用程序部署到heroku时出现Async.times错误(重复循环)
- 在javascript中使用for-in循环应用样式