0

为什么当我尝试使用以下方法选择元素时此元素未定义jQuery

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

panelIdKnockoutjs在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. 但我试图让它可观察但结果相同。

任何人?

4

1 回答 1

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
于 2013-05-09T01:02:56.530 回答