0

したがって、基本的に、起動時にサーバーからデータを取得してから2分ごとに更新するのではなく、2分後にのみ最初の値を取得します。これについてはどうすればよいですか?

これが私のjsマークアップです:

var itemViewModel = {
    item: ko.observable().extend({ throttle: 120000 }),
    loadcontent: function (getID) {
        $.ajax({
            url: '/api/item/details/' + getID,
            dataType: 'json',
            success: function (data) {
                itemViewModel.item(data);
            }
        });
    }
};

たぶんこれは役立つでしょう、ここにHTMLマークアップがあります:

<div id="item-details-content">
    <input type="hidden" id="item-id" value="@id" data-bind=""/>
    <div class="item-list" data-bind="init: itemPage.loadcontent(@id), with: itemPage.item">

条件

  1. の最初の呼び出しがある必要がありますloadcontent
  2. すべてが中にある必要がありますviewModel
4

2 に答える 2

1

それはthrottle extenderリンク)の意味ではありません。代わりにsetIntervallink )を使用してください。

throttle短期間で任意の量のイベントを受信する可能性があり、すべてのイベントに対応したくないシナリオを処理することを目的としています。たとえば、REST-APIを使用するオートコンプリート機能を備えた検索フィールドがあります。ユーザーがキーを押すたびにREST-APIを呼び出す必要はありません。むしろ、ユーザーが入力を完了するまで少し待ちたいと思います。これは、の完璧なユースケースですthrottle

あなたが探しているのは、あらかじめ決められた間隔でアクションを繰り返す方法です。JavaScriptにはそのための組み込み関数があり、それはと呼ばれsetIntervalます。

var itemViewModel = {
    item: ko.observable().extend({ throttle: 120000 }),
    loadcontent: function (getID) {
        var loadData = function()
        {
            $.ajax({
                url: '/api/item/details/' + getID,
                dataType: 'json',
                success: function (data) {
                    itemViewModel.item(data);
                }
            });
        }
        loadData(); // initial call
        setInterval(loadData, 120000); // repeat every 2 minutes
    }
};
于 2012-08-14T15:46:58.997 に答える
0

Throttleの使用目的は、関数がx秒に1回以上実行されないようにすることです。マーティンが言ったように、setIntervalはこの状況でより良いでしょう

var interval = setInterval(function() {
     ko.observable();
}, 120000);

ko.observable();
于 2012-08-14T15:54:03.913 に答える