动态插入Div会破坏KnockoutJS数据绑定
Dynamically Inserting a Div Breaks KnockoutJS DataBinding
我已经创建了一个KnockoutJS应用程序,我还必须使用一些第三方的东西。我的第三方东西使用香草Javascript将div插入Knockout呈现的标记中。一旦发生这种情况,Knockout就会停止工作。
以下是一个概括问题的小提琴:http://jsfiddle.net/p5o8842w/1/
HTML:
<div style="margin-bottom:50px;">
<button onclick='BindVM();' >Bind</button>
<button onclick='ThrowWrench();'>Throw a Wrench Into It</button>
</div>
<div id="ViewModel" data-bind="template: 'Template'">
</div>
<script type="text/html" id='Template'>
<div style="margin-bottom:20px;">
<span data-bind="text: Name"></span>
</div>
<div id="infoDiv">
<input type="text" data-bind="text: Name, value: Name, valueUpdate: 'keyup'" />
</div>
</script>
JavaScript:
function BasicVM () {
var self = this;
self.Name = ko.observable('The Name');
self.Title = ko.observable('The Title');
}
function BindVM() {
var vm = new BasicVM();
var element = document.getElementById('ViewModel');
ko.cleanNode(element);
ko.applyBindings(vm, element);
}
function ThrowWrench() {
var element = document.getElementById('infoDiv');
element.innerHTML = "<div class='container'>" + element.innerHTML + '</div>';
}
首先,单击"绑定"请注意,文本框已绑定到跨度;改变方框,就是改变跨度。
然后,单击"Throw a Wrench Into It"。现在,文本框不再是ViewModel的数据绑定,在其中键入不会影响跨度。
我不能做的事:
- 把第三方代码重构/集成到我的Knockout中
- 在使用Knockout渲染之前运行第三方代码(我认为这会有所帮助)
- 运行第三方代码后,再次调用ko.applyBindings。我可以这样做,但Knockout破坏了第三方代码所做的,所以我必须再次运行它,这将再次导致同样的问题
有办法解决这个问题吗?
因为替换element.innerHTML
失去的是绑定。为了克服这一点。有两种方法可用:1-重新绑定新元素
2-其他
var element = document.getElementById('infoDiv');
var parent = element.parentNode;
var wrapper = document.createElement('div');
parent.replaceChild(wrapper, element);
wrapper.appendChild(element);
这是更新的网址:http://jsfiddle.net/p5o8842w/5/
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- Telerik rad组合框多列数据绑定
- AngularJS数据绑定与KnockoutJS数据绑定
- 动态插入Div会破坏KnockoutJS数据绑定
- 使用 Knockoutjs 的数据表数据绑定
- 围绕数据绑定库(如 AngularJS/KnockoutJS)创建抽象
- 使用 KnockoutJS,如何将数据绑定到来自同一视图模型的 2 个不同的<选择>标签
- KnockoutJS的多个数据绑定-值和javascript函数
- 使用PagerJS的KnockoutJS在数据绑定后停止工作
- 如何在JSON中使用Knockoutjs的数据绑定函数
- 在嵌套的ul上使用knockoutjs数据绑定
- 获取数据绑定的元素(使用KnockoutJS)
- KnockoutJS没有绑定数据
- 如何添加自定义数据绑定到knockoutjs'模板绑定
- 可以'我无法使用knockoutJS进行数据绑定
- 我如何将数据绑定到knockoutjs中的特定位置
- KnockoutJS数据绑定:从javascript点击中点击
- KnockoutJs中的条件数据绑定
- 使用prettyCheckable插件与knockoutjs 2.1检查数据绑定不工作
- 当与绑定一起使用时,KnockoutJS的数据绑定不起作用