タイマーイベントの関数として更新する配列内のいくつかのアイテムを取得しようとしています。しかし、私はノックアウトの方法について私の心を包むことはできません...もっと私は少しノックアウト自分自身を感じる。knockoutjsを使用して配列内のアイテムに計算値を作成
問題私は単純だと思っていますが、おそらく私のアプローチは間違っているかもしれません。あるいは単に私が得られないものがあります。
もう少し詳しいことには:
配列内の項目はそれぞれ、(あなたが見ることができるように、私はko.computedに結合した、サーバーからリロード防ぐために、「何か」からの時間を表しますitems.timeElapsedを取ると、ページがロードされてからの時間を追加し、self.moreTimeElapsed(ことになっていた私が定義されているディスプレイ)機能、)
HTML:
<div>
<ul data-bind="foreach: counted">
<li><span data-bind="text: name"></span> - <span data-bind="text: display"></span></li>
</ul>
</div>
とのViewModel
<script type="text/javascript">
function myViewModel() {
var self = this;
self.email = '[email protected]';
var d = new Date();
self.startTime = d.getTime();
self.moreTimeElapsed = ko.observable(0);
var items = [{"name":"counter1","timeElapsed":168},{"name":"counter2","timeElapsed":162}];
for (i = 0; i < items.length; ++i)
{
items[i].display = ko.computed(function()
{
return items[i].timeElapsed + self.moreTimeElapsed();
})
}
self.counted = ko.observableArray(items);
self.updateCounters = function() {
var d = new Date();
self.moreTimeElapsed(d.getTime() - self.startTime);
}
setInterval(self.updateCounters, 3000);
};
ko.applyBindings(new myViewModel());
function Reload() {
location.reload(true);
}
</script>
ヒントやアイデアが高く評価されました。
まあ...いいえ。しかし、私はあなたが孤立した機能を定義することによってあなたの問題を解決したことをうれしく思います。これは、愚かなIIFEハックを使うよりもはるかに優れています。これはまさにこの問題を解決するために導入された 'let'キーワードが不必要な理由です。 – Redu