如何使用敲除绑定新元素

How do I bind new elements using knockout?

本文关键字:元素 新元素 绑定 何使用      更新时间:2023-09-26

如何绑定页面加载后创建的新元素?

我有一个类似的东西

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);
}    

但根据这些帖子,这是行不通的。

淘汰赛的目标是在一组dom元素上只调用一次淘汰赛。因此,如果在整个文档上重复调用applyBindings,则会出现多个绑定的问题。

在少数情况下,多次调用applyBindings是合理的,这是在部分视图的情况下,这些视图在第一次绑定时不在dom中,因此没有绑定。您可以通过有选择地将applyBindings的范围界定到该dom元素来绑定它们。

下面是一个你试图实现的目标的例子。您的问题是没有插入您创建的节点。

http://jsfiddle.net/madcapnmckay/qSqJv/

对于这个特定的例子,我不建议采用这种方法,有更好的方法。

如果您想动态创建dom元素并通过敲除将其绑定,最常见的方法是使用内置的模板功能,该功能负责插入元素并绑定它找到的任何数据绑定属性。

因此,如果你想创建一些按钮,你可以做

this.makeUI = function(container)
{
    self.buttons.push({
        text: "button " + self.buttons().length,
        handler: this.hello
    });
}

这是一把小提琴。

http://jsfiddle.net/madcapnmckay/ACjvs/

希望这能有所帮助。