つまり、「計算された値の変更に基づいてスタイルを動的に変更する」ということです。
私は、たとえば3の初期セットを持つ監視可能な配列を持っています。
配列の各要素が個別のdivに入るテンプレートを使用します(cssで左にフロートします)
<script type="text/html" id="feedsTemplate">
<div style="float:left;" data-bind="style: { width: $root.CurrentColumnWidth()+'px'}">
<strong data-bind="text: SearchTerm"></strong>
</div>
</script>
ここに私のビューモデルがあります:
var viewModel = {
Feeds: ko.observableArray([
new Feed("Boston"),
new Feed("NewYork"),
new Feed("Chicago", ),
]),
GetLatestFeeds: function () { getLatestFeeds(); },
FeedsCounter: ko.observable(3),
CurrentColumnWidth: ko.computed (function()
{
return ((GetCurrentPageWidth() / this.FeedsCounter));
},this)
};
その配列の要素数に応じて、各要素が配置される div の幅を計算します。(カウンターを使わず、viewModel.Feeds.lengthを直接参照するようにしましたが、observableArrayにlengthがないようです)
私が抱えている問題は、サーバーからの更新により、フィードの要素数が増加した後、div 幅の再計算が行われないことです。ここに更新機能があります:
関数 getLatestFeeds() {
$.getJSON('/Feed/GetUpdatedFeeds', function (data)
{
$.each(data, function ()
{
viewModel.Feeds.push(new Feed(this.SearchTerm, this.FeedItems));
viewModel.FeedsCounter = viewModel.FeedsCounter + 1;
});
});
}
私が理解している限り、www.knockoutjs.com から: UI要素やその他の計算されたオブザーバブルなどのオブザーバーに)。」
FeedsCounter が変更されるたびに、計算された var も更新され、div の css にバインドされているため、幅も変更する必要があります..それは起こりません。
ヘルプ/提案/ポインタをいただければ幸いです。
ありがとう!