4

ノックアウト ビュー モデルに結合された他の html 要素を内部に持つ div コンテナーを動的に構築する状況があります。これは、div 全体を再描画する必要があるノックアウト ビュー モデルのメソッドを呼び出すところまで機能します。ノックアウトの再描画が機能しなくなった後。

例えば:

 calendar += ('<div class="month-nav-container"><div class="nav-prev" data-bind="click:          $root.showPreviousMonthOnPrevMonthBtnClick" ><<<</div><span class="month-name-calendar">' + monthNames[month] + '</span><div class="nav-next" data-bind="click: $root.showNextMonthOnNextMonthBtnClick" >>>></div></div>');

私は自分のカレンダー コントロールをこのように作成しているので、もちろんこれはほんの一部ですが、一般的なアイデアが得られることを願っています。

私のノックアウトビューモデルメソッド:

self.showPreviousMonthOnPrevMonthBtnClick = function () {
    alert("prev");
    var $calendar = $("#calendar");
    $calendar.empty();

    ////// previous month
    if (self.calendarDisplayDate.month == 0) {
        $calendar.calendarWidget({ month: 12, year: self.calendarDisplayDate.year - 1 });
    } else {
        $calendar.calendarWidget({ month: self.calendarDisplayDate.month - 1, year: self.calendarDisplayDate.year});            
    }

}

ページの読み込み時にカレンダー div を作成し、ビュー モデルに ko.applyBindings() を呼び出すと機能します。しかし、正しい月に従ってカレンダーを再描画する必要がある前月のメソッドを呼び出すボタンをクリックすると、ノックアウトが機能しなくなります。すべてのノックアウト バインディングを保持する親 div 全体を再描画します。誰も私の問題の解決策を知っていますか? 内部に KO バインディングがある div を再描画する必要があるので、おそらく探しているのは Knockout の何らかのバインディング リフレッシュ メソッドですか?

4

2 に答える 2

20

ここで解決策を見つけました:

Knockout.jsで観察可能なバインディングをクリア/削除するには?

 var element = $('#elementId')[0]; 
 ko.cleanNode(element);

その後

 ko.applyBindings(myVieModel, parentDiv)
于 2013-09-17T22:40:16.530 に答える
0

更新が必要なすべてのhtml要素が監視可能な関数、つまりobservablefoo()ではなくobservablefooにバインドされていることを確認してください

于 2013-09-17T21:10:22.883 に答える