Javascript li项单击事件的动态绑定

Javascript li项单击事件的动态绑定,javascript,jquery,html,knockout.js,Javascript,Jquery,Html,Knockout.js,我有durandal和knockout web应用程序。 我有一个html,如下所示: <ul id="header"> </ul> 在.js函数中,我动态添加li,如下所示: $("#header).append('<li id="btn"><a href="javascript://" data-bind="click:function(data,event) { $root.testmethod(data,event); return t

我有durandal和knockout web应用程序。 我有一个html,如下所示:

<ul id="header">

</ul>
在.js函数中,我动态添加li,如下所示:

$("#header).append('<li id="btn"><a href="javascript://" data-bind="click:function(data,event) { $root.testmethod(data,event); return true;}"> <span class="name">Test</span></a></li>')

ko.applyBindingsToNode(ul);
$(“#头)。追加(“
  • ”) ko.applyBindingsToNode(ul);
    我知道,在调用applyBindings之后,我正在绑定li 但是仍然没有运气


    有人能告诉我这个的语法/替代解决方案是什么吗?

    /
    开始一个JavaScript注释。这意味着
    之后的所有内容都参考演示

    请查找以下代码:

    HTML:

    <ul id="header">
    
    </ul>
    
    $(function() {
      $("#header").append('<li id="btn">' + '<a href="javascript://" data-bind="click:function(data,event) { $root.testmethod(data,event); return true;}"> <span class="name">Test</span></a></li>');
      //ko.applyBindingsToNode(ul);
    });
    
    JS:

    <ul id="header">
    
    </ul>
    
    $(function() {
      $("#header").append('<li id="btn">' + '<a href="javascript://" data-bind="click:function(data,event) { $root.testmethod(data,event); return true;}"> <span class="name">Test</span></a></li>');
      //ko.applyBindingsToNode(ul);
    });
    
    $(函数(){
    $(“#头”).append(“
  • ”+”
  • ”); //ko.applyBindingsToNode(ul); });
    使用foreach:

    var DemoPage=(函数(){
    函数DemoPage(){
    var_this=这个;
    _this.buttons=ko.observearray([]);
    _this.debug=ko.可观察(“”);
    _this.testmethod=函数(数据、事件){
    _this.debug('Clicked LI:'+data.buttonId);
    }
    _this.addHeadingRow=函数(){
    _这个按钮({
    buttonId:Math.floor(Math.random()*100)
    });
    }
    }
    返回演示页面;
    })();
    var demoApp=new DemoPage();
    ko.applyBindings(demoApp);
    
    
    • 试验
    添加标题行

    我想回答我自己的问题

    解决方案非常简单

    .js文件中定义一个可观察数组

    self.arraysample = ko.observableArray([]);
    
    在方法中,使用数据填充数组

    self.arraysample.push(data)
    
    在html页面中,我们可以执行以下操作:

    <ul id="head" data-bind:"foeach:arraysample">
    
      <li>
          <a id="btn">
             <span data-bind="text:$data.arrayelement"></span>
          </a>
      </li>
    </ul>
    
    这就是当“self.arraysample”中的数据发生更改时,将自动更新,因为会删除js属性


    我希望它能帮助一些人,因为我在网上看到过很多建议再次使用ko.applyBindings()的例子,但这些例子根本不起作用。

    在ko文档页面上有一个简单的例子,你可以使用一个简单的foreach绑定,将新的li项推送到数组中