1

ノックアウト foreach 構文を使用してデータ バインドされた div があります。

<div id="myDiv" data-bind="foreach: { data: myData }, myCustomBinding: { param: paramname }">
     <a id="myLink" class="myLink" data-bind="text: label"></a>
</div>

myData は、データを保持する ObservableArray です。次のように、myData にノックアウト サブスクライブがあります。

myData.subscribe(function () {
if (myData().length > 0) {
     resizeDiv();
 }
});

resizeDiv() 関数では、結合されたすべてのコントロールのサイズが div の幅より大きい場合、この div からいくつかのリンクを削除し、別の非表示の div に移動しようとしています。しかし問題は、現時点ではコントロールの幅が利用できないことです。ブラウザーのサイズを少し変更すると、DOM でコントロールの幅が更新されます。同じ resizeDiv() メソッドを呼び出すウィンドウ サイズ変更イベントを追加しました。

$(window).on('resize', function () {
   resizeDiv();
});

自分の問題/懸念を伝えることができたかどうかわからない. さらに情報が必要な場合はお知らせください。

更新: これはフィドルhttp://jsfiddle.net/2m3Jk/7/です。しかし、バインディングハンドラーはフィドルで発火していません。私のアプリケーションでは、ウィンドウのサイズを変更すると、バインディング ハンドラーが起動し、メニュー項目が 1 つの div から別の div に移動します。ただし、ページの読み込み時ではありません。

4

1 に答える 1

1

レンダリング プロセスでノックアウトと競合する場合は、プレーンな JavaScript から dom 操作を使用することはお勧めしません。たぶん、afterRender バインディングを使用してサイズ変更関数を呼び出すことができます: http://knockoutjs.com/documentation/template-binding.html#note-4-using-afterrender-afteradd-and-beforeremove

于 2014-08-04T00:51:40.037 に答える