CanJS как обновить модель

У меня есть модель, которая представляет список заданий, которые выполняются на сервере

Я хочу опросить сервер на наличие обновлений по таймеру, чтобы показать изменения в состоянии заданий.

Как мне это сделать?

Мой контроль выглядит так

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 ответ

Решение

Сначала одно наблюдение:

Если вы получаете набор рабочих мест, вы, вероятно, хотите использовать 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

Другие вопросы по тегам