0

を使用して要素を選択しようとすると、この要素が未定義になるのはなぜですかjQuery:

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

panelIdKnockoutjsViewModelのプロパティとして定義されています。

    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 に答える