我正在寻找获取完成时触发事件的最佳方式 这段代码有效,但我很想知道是否有更好的方法来完成以下任务。
var myApp = new Marionette.Application();
myApp.on("initialize:before", function () {
this.currentUser = new UserModel();
this.currentUser.fetch({
complete: function () {
myApp.vent.trigger('currentUser');
}
});
});
答案 0 :(得分:3)
成功fetch
triggers a "change"
event:
抓取
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
,但这样会留下无操作回调函数,并且不需要这样做。