使用 Jquery 加载填充 jquery ui 对话框时的敲除绑定

Posted

技术标签:

【中文标题】使用 Jquery 加载填充 jquery ui 对话框时的敲除绑定【英文标题】:Knockout bindings when using Jquery load to fill a jquery ui dialog 【发布时间】:2016-07-18 13:50:35 【问题描述】:

我敢肯定,我从根本上误解了这里的某些东西,但我终其一生都无法解决。

我正在使用 jquery ui 对话框来创建表单弹出窗口。表单的视图位于单独的文件中,因此打开对话框时我使用 Jquery.load() 来填充对话框。

然后我想应用淘汰赛绑定。

我用一些简单的代码重现了我的问题。

html 文件:

<script src="knockout-3.4.0.js"></script>
<script src="Jquery/jquery-1.12.2.js"></script>
<script src="jquery-ui-1.11.4/jquery-ui.js"></script>

<link rel="stylesheet" type="text/css" href="jquery-ui-1.11.4/jquery-ui.css"">

<script>
$(document).ready(function()

//initialise the dialog
$( "#dialog" ).dialog(
  modal: true,
  autoOpen: false
);


$("#btn").click(function()
    //open the dialog and load the html from the Popup page
    $("#dialog").load('Popup.html').dialog("open");



    //apply a simple binding to the container div in the Popup page
    ko.applyBindings( someText: "value from knockout", $("#container")[0] );


);

);
</script>

<button id="btn">Click</button>

<div id="dialog" style =  "display: none;">the hidden Div</div>

弹出的 html 文件:

<div id="container">

<p data-bind="text: someText">Default text in html popup</p>

</div>

如果我替换

ko.applyBindings( someText: "value from knockout", $("#container")[0] );

setTimeout(function() 
ko.applyBindings( someText: "value from knockout", $("#container")[0] );
,200);

然后它可以工作文件(尽管像预期的那样有一点延迟),但这感觉不是“正确”的答案。这让我相信 applyBindings 运行得太快了,所以我尝试放入 $.load() 的回调,但得到了相同的结果。

我是否遗漏了一些非常明显的东西?

【问题讨论】:

【参考方案1】:

你需要确保ko.applyBindings()被调用Popup.html的内容已经被加载(因为Ajax是asynchronous并且在继续之前不会等待内容被加载到applyBindings() 电话)。

最简单的方法是提供回调函数:

$("#dialog").load('Popup.html', function() 
    $(this).dialog("open");
    ko.applyBindings(someText: "value from knockout", $("#container")[0]);
)

见load()

【讨论】:

我不敢相信它这么简单!我以为我尝试了回调,但显然做错了什么!谢谢你,你把我的头从桌子上的任何刘海中拯救了出来(今天!)。

以上是关于使用 Jquery 加载填充 jquery ui 对话框时的敲除绑定的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI 自动完成与类似 Chrome 的自动填充

jQuery UI Datepicker 将备用字段填充并格式化为 MySQL 日期

jquery ui 选择菜单自动填充

如果超出范围,防止 jQuery UI datepicker 更改文本字段的值

Jquery ui自动完成填充带有ID​​的隐藏字段

jquery easy ui datagrid 怎样设置宽度,让列永远百分之百填充