Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中触发事件_Javascript_Jquery_Events_Javascript Events - Fatal编程技术网

在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",

我有一个名为“Item”的JavaScript类“项目”的定义如下所示:

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