我目前的情况:对于 a Backbone.Collection
(但也应该是 a Backbone.Model
),我以这种方式扩展类(1)。
我想分享的功能如下:
1)startPolling
并且stopPolling
应该是可从所有 Backbone.Collections 以及最终 Backbone.Models 访问的公共方法
2)executePolling
并且onFetch
应该是私有方法。
在所有保留 和私有方法之间共享startPolling
和共享的最佳方式是什么?stopPolling
Backbone.Collection/Backbone.Model
executePolling
onFetch
我的想法是创建一个新文件utils/backbone.polling.js
(2)。是很好的解决方案吗?
(1)
define([
'backbone',
'models/myModel'
], function (Backbone, MyModel) {
'use strict';
var MyCollection = Backbone.Collection.extend({
model: MyModel,
url: 'some_url'
initialize : function () {
_.bindAll(this);
},
startPolling: function () {
this.polling = true;
this.minutes = 2;
this.executePolling();
},
stopPolling: function () {
this.polling = false;
},
executePolling: function () {
this.fetch({success : this.onFetch});
},
onFetch: function () {
if (this.polling) {
setTimeout(this.executePolling, 1000 * 60 * this.minutes);
}
}
});
});
(2)
utils/backbone.polling.js
Backbone.Collections.startPolling = function () {
// code here
};
Backbone.Collections.stopPolling = function () {
// code here
};