在JavaScript中触发事件
我有一个名为“Item”的JavaScript类“项目”的定义如下所示:在JavaScript中触发事件,javascript,jquery,events,javascript-events,Javascript,Jquery,Events,Javascript Events,我有一个名为“Item”的JavaScript类“项目”的定义如下所示: function Item() { this.create(); } Item.prototype = { create: function () { this.data = { id: getNewID(), } }, save: function() { $.ajax({ url: getBackendUrl(), type: "POST",
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中是否可行?如果是,怎么做?我错过了什么?我不断收到各种模糊的错误。正因为如此,我不确定我是越来越近还是越来越远
谢谢你的帮助 如果使用jQuery,可以将事件处理程序添加到自定义事件类型。 以下代码段取自
但是由于jQuery1.7不推荐使用
bind
,所以现在应该在上使用。请参阅。不是100%确定,我期待看到JS pro的答案,但以下是我将要做的
公开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(); }
});
},
实际上,将回调函数传递给对象,并让它在需要时直接调用它们。我相信现在会有人提出更好的方法。:-) 我看到了$
。您在使用jQuery吗?@epascarello我想他是,因为$.ajax()是典型的jQuery语法。
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(); }
});
},