骨干模型如何从Ajax结果中触发事件?

Dig*_*lWM 3 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");
           }
         });
    }
});
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到以下错误

this.trigger 不是一个功能

在外部方法上,我可以触发东西......就像

var task = new Task();
task.trigger("something","payload");
Run Code Online (Sandbox Code Playgroud)

我做错了什么?还是不做:)

sti*_*man 12

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");
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

编辑:查看"这个"如何确定的解释.


abr*_*ham 7

我个人更喜欢saveSuccess在模型上使用方法.

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