如何在页面加载后绑定新元素?
我有类似的东西
system = function()
{
this.hello = function()
{
alert("hello");
}
this.makeUI = function(container)
{
div = document.createElement("div");
div.innerHTML = "<button data-bind='click: hello'>Click</button>";
}
}
ko.applyBindings(new system);
如果我试试这个
this.makeUI = function(container)
{
div = document.createElement("div");
div.innerHTML = "<button data-bind='click: hello'>Click</button>";
ko.applyBindings(new system,div);
}
答案 0 :(得分:11)
淘汰赛的目标是只在一组dom元素上调用一次淘汰赛。因此,如果在整个文档上重复调用applyBindings,则会出现多个绑定问题。
在少数情况下,多次调用applyBindings是合理的,这是在第一次绑定时不在dom中的部分视图的情况下,因此没有绑定。您可以通过选择性地将applyBindings作用于该dom元素来绑定它们。
以下是您尝试实现的示例。您的问题是您没有插入您创建的节点。
http://jsfiddle.net/madcapnmckay/qSqJv/
对于这个特定的例子我不推荐这种方法,有更好的方法。
如果你想动态创建dom元素并让它们通过knockout绑定,最常见的方法是使用内置的模板功能,它负责插入元素并绑定它找到的任何数据绑定属性。
所以如果你想创建一些你可以做的按钮
this.makeUI = function(container)
{
self.buttons.push({
text: "button " + self.buttons().length,
handler: this.hello
});
}
这是一个小提琴。
http://jsfiddle.net/madcapnmckay/ACjvs/
希望这有帮助。