当日期过期时,BackboneJS隐藏模型
BackboneJS Hide Model when date has expired
我有一个骨干应用程序,在那里我显示基于JSON数据的模型集合。在JSON数据中,我有endDate
——它提供了实时日期。它是基于一个竞赛模块。我想要实现的是,如果给定的日期已经过期,我想要从集合中隐藏(甚至可能删除)模型,以便竞争不再可用。
Competition.View = Backbone.View.extend({
tagName: 'ul',
template: 'competition',
initialize: function() {
this.listenTo(this.model, 'sync', this.render);
},
serialize: function() {
return this.model.toJSON();
}
});
Competition.CompetitionModel = Backbone.Model.extend({
url: function() {
return App.APIO + '/i/contests';
},
comparator: function(item) {
return item.get('endDate');
},
defaults: {
"data": []
}
});
然后在我的主模块中,我导入competition.js,在这里我获取模型并在特定的HTML元素中渲染它(不知道是否有必要复制/粘贴它在这里为我的原始问题):
function (App, Backbone, Competition) {
var CompetitionOverview = App.module();
CompetitionOverview.View = Backbone.View.extend({
template: 'competitionOverview',
initialize: function(){
this.render();
},
beforeRender: function() {
var competitionModel = new Competition.CompetitionModel();
this.insertView('.singleComp', new Competition.View({model: competitionModel}));
competitionModel.fetch();
},
});
return CompetitionOverview;
}
那么,我如何实现隐藏/删除日期已过期的模型?
您声明您有模型集合,但是您的Competition.CompetitionModel
扩展了Backbone.Model
而不是Backbone.Collection
。在我的回答中,我假设CompetitionModel是Backbone.Collection
而不是Backbone.Model
。
也就是说,我认为你有两个选择:
-
检查
Competition.View
的渲染函数是否应该实际显示基于结束日期的内容:Competition.View = Backbone.View.extend({ tagName: 'ul', template: 'competition', initialize: function() { this.listenTo(this.model, 'sync', this.render); }, serialize: function() { return this.model.toJSON(); }, render: function(){ //dependending on in which format your date is you might have to convert first. if(this.model.get('endDate') < new Date().getTime()){ //render the view } });
-
或者,我认为这更简洁,当数据从服务器传入时检查日期。我认为当从服务器获取集合时,主干会在集合上触发一个"添加"事件。所以,再一次,让你的Competition Model成为一个Competition Collection并收听add事件。把
Competition.CompetitionModel = Backbone.Collection.extend({ initialize: function () { this.on("add", checkDate) }, checkDate: function(model, collection, options){ //again, get the right conversion //but here you should compare your end date with the expire date if(model.get('endDate') < new Date().getTime()){ this.remove(model.id); } }, url: function () { return App.APIO + '/i/contests'; }, comparator: function (item) { return item.get('endDate'); }, defaults: { "data": [] } });
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 显示5秒后隐藏潜水
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 浮动页脚栏-使用Bootstrap隐藏
- 在jquery中为显示/隐藏设置cookie
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 从var向代码隐藏函数传递值
- Image赢得't隐藏在滚动jQuery上
- 具有rowGrouping的数据表无法隐藏列
- Jquery隐藏未触发
- JavaScript 检查隐藏字段中的值并将其设置为隐藏字段值
- 分部隐藏在jquery中不起作用
- 点击后隐藏潜水?(但如果Div是一面旗帜呢?)
- javascript.点击隐藏事件故障
- 禁用(而不是隐藏)浏览器滚动条
- PHP Javascript显示/隐藏按钮不工作
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- 当日期过期时,BackboneJS隐藏模型