【发布时间】:2014-04-28 19:56:58
【问题描述】:
我正在尝试为个人项目实现一个简单的通知系统,但我陷入了如何将事件绑定到通知以响应用户操作(如接受或拒绝)的问题。
到目前为止,我得到的是一个动态创建的对象。
/* reference to notifications */
var notifications = [];
// the notification object
var Notification = function(travelInfo){
this.el = $('#notifications_container');
this.id = Math.random().toString().substring(7);
this.travelInfo = travelInfo;
this.read = false;
};
Notification.prototype.init = function(){
this.addOne();
this.render();
this.bindFunctions();
}
/* dynamically created */
for(var i = 0; i < 10; i++){
var notification = new Notification(travelInfo);
notifications.push(notification);
notification.init();
}
该对象应该渲染事件并将事件实际绑定到渲染元素,以便独立跟踪每个通知的操作:
// render the view of a notification
Notification.prototype.render = function(){
var source = $('#notification-template').html();
var template = Handlebars.compile(source);
var data = this.travelInfo;
result = template(data);
$('#notifications_container').append(result);
}
Notification.prototype.addOne = function(){
var number = +$('#notifications_indicator').html();
$('#notifications_indicator').html(number += 1);
}
Notification.prototype.removeOne = function(){
var number = +$('#notifications_indicator').html();
$('#notifications_indicator').html(number -= 1);
}
Notification.prototype.alertId= function(){
alert('the notification with id:' + this.id + ' is accepted');
}
Notification.prototype.bindFunctions = function(){
var self = this;
this.el.on('click', 'li .accept', function(){
self.alertId();
});
}
我的方法的问题在于,实际上如果我创建 10 个元素,点击事件会触发 10 次,显示 10 个警报。我想知道的是如何实现一个系统,在该系统中我渲染一个元素并将事件绑定到该元素,就像主干将事件绑定到每个视图项的方式一样。我觉得骨干对于我现在需要的东西来说是如此之大,这只是通知系统。我希望你们能帮助我找到一种方法来做到这一点。
【问题讨论】:
-
你绑定了10次点击事件,你不能绑定到实际被点击的元素吗?如果不是,您是否可以仅查看您是否已绑定到容器一次然后不再绑定?
-
您尝试将哪些事件绑定到对象。
-
@MuhammadUmer 我想要的是例如当您单击通知中的接受按钮以将对象的读取状态从 false 设置为 true 时绑定一个事件。
-
@JasonGoemaat 其实我想要的也是保持渲染的 DOM 元素与创建的对象的关系,但不知道如何实现它
标签: javascript jquery oop object backbone.js