我有一个名为'Item'的JavaScript类。 'Item'的定义如下:
function Item() { this.create(); }
Item.prototype = {
create: function () {
this.data = {
id: getNewID(),
}
},
save: function() {
$.ajax({
url: getBackendUrl(),
type: "POST",
data: JSON.stringify(this.data),
contentType: "application/json",
success: save_Succeeded,
error: save_Failed
});
},
function save_Succeeded(result) {
// Signal an event here that other JavaScript code can subscribe to.
}
function save_Failed(e1, e2, e3) {
// Signal an event here that other JavaScript code can subscript to.
}
}
请注意,我来自C#背景。所以我甚至不确定我想要完成的任务是否可行。但实际上,我想创建一个对象,订阅一些事件处理程序,并尝试保存我的对象。例如,我想在我的代码中做类似的事情。
var i = new Item();
i.item_save_succeeded = function() {
// Do stuff when the item has successfully saved
};
i.item_save_failed = function() {
// Do stuff when the item has failed to save
};
i.save(); // start the save process
这种基于事件的方法在JavaScript中是否可行?如果是这样,怎么样?我错过了什么?我不断收到各种含糊不清的错误。因此,我不确定我是否越来越近了。
感谢您的帮助!
答案 0 :(得分:3)
如果您使用的是jQuery,则可以向自定义事件类型添加事件处理程序。 以下代码段取自the jQuery docs
$('#foo').bind('custom', function(event, param1, param2) {
alert(param1 + "\n" + param2);
});
$('#foo').trigger('custom', ['Custom', 'Event']);
但是由于jQuery 1.7弃用了bind
,所以现在应该使用on
。请参阅jQuery docs for on。
答案 1 :(得分:0)
不是100%肯定,我期待看到JS专业人士的回答,但这就是我要做的。
在您的Item对象中展示一些属性 - 即您希望订阅的函数。
在实例化项目后,您可以为希望收到通知的事件提供回调函数。在您的代码中,您可以执行以下操作:
save: function() {
var self = this;
$.ajax({
url: getBackendUrl(),
type: "POST",
data: JSON.stringify(this.data),
contentType: "application/json",
success: function() { if(typeof(self.success) == "function") self.success(); }
error: function() { if(typeof(self.fail) == "function") self.fail(); }
});
},
实际上,将回调函数传递给对象,并在需要时让它直接调用它们。我相信有人会建议一个更好的方法。 : - )