CanJS如何刷新模型

时间:2014-03-12 11:47:48

标签: canjs canjs-model

我有一个模型,表示在服务器上运行的作业列表

我想轮询服务器以获取计时器上的更新,以显示作业状态的更改。

我该怎么做?

我的控件看起来像这样

var control = Control({
        defaults: {
            view: 'app/views/job-index.ejs'
        }
    }, {
        init: function () {
            this.element
                .empty()
                .append(can.view(this.options.view, this.options));

            var options = this.options;
            window.setInterval(function() {
                options.result.refresh();
            }, 1000);
        },
    });

我的模型,到目前为止看起来像这样

var model = can.Model({
        findOne: 'GET /api/jobs'
    }, {
        refresh: function() {
            // what goes here?
        }
    });

1 个答案:

答案 0 :(得分:2)

首先观察一次:

如果您要获得一系列工作,您可能应该使用findAll而不是findOne:

findAll: 'GET /api/jobs',
findOne: 'GET /api/jobs/{id}'

我知道result是一条记录。所以你可以这样做:

var Model = can.Model({
    findAll: 'GET /api/jobs',
    findOne: 'GET /api/jobs/{id}'
    }, {
        refresh: function () {
            var id = this.attr('id');
            var self = this;

            Model.findOne({id: id}, function (model) {
                self.attr(model.attr());
            });
    }
});

此外,按照惯例,您应该将模型类Model命名为model

这是一个小提琴http://jsbin.com/xarodoqo/4/edit