0

我正在寻找在获取完成时触发事件的最佳方式。
此代码有效,但我很想知道是否有更好的方法来完成以下任务。

var myApp = new Marionette.Application();

myApp.on("initialize:before", function () {
    this.currentUser = new UserModel();
    this.currentUser.fetch({
        complete: function () {
            myApp.vent.trigger('currentUser');
        }
    });
});
4

1 回答 1

2

成功fetch触发"change"事件

拿来 model.fetch([options])

[...]"change"如果服务器的状态与当前属性不同,将触发一个事件。

因此,如果fetch它有任何作用,那么"change"您可以收听一个:

myApp.on("initialize:before", function () {
    this.currentUser = new UserModel();
    this.currentUser.on('change', function() {
        myApp.vent.trigger('currentUser');
    });
    this.currentUser.fetch();
});

如果以其他方式更改并且这可能是也可能不是您想要的,那也会触发一个"currentUser"事件。this.currentUser如果您只想调用一次您的函数,那么您当前的success处理程序可能是最容易做的事情;on当它被调用时,您仍然可以使用和取消绑定处理程序:

myApp.on("initialize:before", function () {
    var triggerCurrentUser = _.bind(function() {
        myApp.vent.trigger('currentUser');
        this.currentUser.off('change', triggerCurrentUser);
    }, this);

    this.currentUser = new UserModel();
    this.currentUser.on('change', triggerCurrentUser);
    this.currentUser.fetch();
});

您也可以使用_.once,但这会留下一个无操作回调函数,并且没有必要这样做。

于 2012-06-27T22:40:17.717 回答