javascript - 如何使用 knockout 绑定(bind)新元素?

标签 javascript data-binding web knockout.js

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

我有这样的东西

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

但根据these posts它不会起作用。

最佳答案

knockout 的目标是只对一组 dom 元素调用一次 knockout。因此,如果您对整个文档重复调用 applyBindings,您将遇到多个绑定(bind)的问题。

在某些情况下,多次调用 applyBindings 是合理的,这是在第一次绑定(bind)时不在 dom 中的部分 View 的情况下,因此未绑定(bind)。您可以通过有选择地将 applyBindings 的范围限定到该 dom 元素来绑定(bind)它们。

这是您尝试实现的目标的示例。您的问题是您没有插入您创建的节点。

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

对于这个特定示例,我不推荐这种方法,有更好的方法。

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

所以如果你想创建一些你可以做的按钮

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

这是一个 fiddle 。

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

希望这对您有所帮助。

关于javascript - 如何使用 knockout 绑定(bind)新元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10051070/

相关文章:

javascript - 没有隔离范围的指令中的两种方式数据绑定(bind)

javascript - 使用ajax将值从servlet返回到jsp页面

c# - ContextMenuItem isEnabled 绑定(bind)到 Object 属性

javascript - 如何重复使用浏览器已下载的音频,这样浏览器就不会在使用相同音频文件的其他页面中再次下载该音频?

javascript - 使用 Javascript 读取文本文件

javascript - 对于映射实体, Breeze 日期未正确具体化

c# - wpf - 更新的依赖属性不触发绑定(bind)

c# - 绑定(bind)到 BindingList 的 DataGridView 在值更改时不刷新

asp.net - VB 独立应用程序或 ASP Web 应用程序

html - 文件无法编辑 Github 页面