javascript - Backbone 模型如何从 Ajax 结果触发事件?

标签 javascript backbone.js underscore.js

我有以下情况:

var Task = Backbone.Model.extend({
    initialize: function() {
    },
    save: function() {
        $.ajax({
           type    : "POST",
           url     : "/api/savetask",
           data    : this.toJSON(),
           success : function (response) {
           this.trigger("something", "payload");
           }
         });
    }
});

当我运行它时,出现以下错误

this.trigger is not a function

在外部方法上,我可以触发一些东西......比如

var task = new Task();
task.trigger("something","payload");

我做错了什么?或者不做 :)

最佳答案

匿名函数中的

this指的是ajax对象。这是因为 javascript 中的“this”会根据函数的范围发生变化。为了引用初始函数的“this”,将其分配给不同的变量。以下将起作用:

save: function() {
    var self = this;
    $.ajax({
        type    : "POST",
        url     : "/api/savetask",
        data    : this.toJSON(),
        success : function (response) {
            self.trigger("something", "payload");
        }
    });
}

编辑:参见an explanation “这个”是如何确定的。

关于javascript - Backbone 模型如何从 Ajax 结果触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10030101/

相关文章:

underscore.js - Gulp、html 模板和片段加载

javascript - 我怎样才能一次隐藏 Highcharts 中的所有系列

javascript - 我该如何循环这个?

javascript - 如何将对象与数组进行比较并返回值

backbone.js - 主干 : Collection not being passed into view with Require. js

javascript - 使用 Backbone.js 路由器进行路由而不是使用服务器端代码的原因

javascript - 根据偶数/奇数索引将数组转换为对象

javascript - 具有存储在 meteor 集合中的新行的字符串

javascript - 你如何听 Backbone 事件方法上的 keydown

javascript - JavaScript 中的 _.defer 和 _.throttle 是什么?