用JavaScript启动事件

时间:2012-03-13 17:23:13

标签: javascript jquery events javascript-events

我有一个名为'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中是否可行?如果是这样,怎么样?我错过了什么?我不断收到各种含糊不清的错误。因此,我不确定我是否越来越近了。

感谢您的帮助!

2 个答案:

答案 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(); }
    });
  },

实际上,将回调函数传递给对象,并在需要时让它直接调用它们。我相信有人会建议一个更好的方法。 : - )