选择具有通过Knockout绑定的id属性数据的元素

时间:2013-05-08 19:11:42

标签: javascript jquery html5 dom knockout.js

当我尝试使用jQuery选择元素时,为什么此元素未定义:

    <ul data-bind="attr: {id: panelId}"></ul>

panelId被定义为Knockoutjs ViewModel:

中的属性
    var VM = function () {
       var self = this,
           date = new Date();
       self.panelId = "panel-" + date.getTime();

       $("#"+self.panelId).doSomthing(); // element is undefined
    }

在Chrome开发者工具中检查该页面,我可以看到ID被分配如此

    <ul data-bind ... id="panel-1368039734501"</ul>

panelId属性不一定是observable。但我试图让它可观察但结果相同。

任何?

1 个答案:

答案 0 :(得分:1)

问题是ID属性仅应用于ko.applyBindings调用,但您尝试在此之前按ID查找元素。

为避免这种情况,请执行以下操作:

var VM = function () {
   var self = this,
       date = new Date();
   self.panelId = "panel-" + date.getTime();
}

var vm = new VM();
ko.applyBindings(vm); // Adds the ID attribute

$("#"+vm.panelId).doSomething(); // This needs to be after ko.applyBindings