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链接)的意思。请改用setInterval链接)。

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's intended use is to make sure the function does not execute more then once every x seconds. As Martin said, setInterval would be better in this situation

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

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