質問

I have a model which represents a list of jobs which are run on the server

I want to poll the server for updates on a timer to show changes to the state of the jobs.

How do I do this?

My Control looks like this

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);
        },
    });

my model, so far looks like this

var model = can.Model({
        findOne: 'GET /api/jobs'
    }, {
        refresh: function() {
            // what goes here?
        }
    });
役に立ちましたか?

解決

One observation first:

If you are getting a collection of jobs you should probably want to use findAll instead of findOne:

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

I understand that result is a single record. So you can do something like:

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());
            });
    }
});

Also, by convention you should name your model class Model not model.

Here is a fiddle http://jsbin.com/xarodoqo/4/edit

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top