我第一次使用jQuery defer和promises,我遇到了一点混乱,我希望有人为我清理,在一个视图中我有一个复选框,它确定了一个值模型属性。我希望在用户检查此输入时发出确认信息,并根据肯定或否定的响应从那里开始。
到目前为止,我在模型视图中有这个,
App.Views.UserInitialsWithAdmin = Backbone.View.extend({
className : 'avatar-member',
template: _.template( $('#tpl-person-initials-with-admin').html() ),
events: {
"change input[type=checkbox]" : "changeAdmin"
},
initialize: function() {
this.model.on('change:is_admin', this.doAdmin, this );
},
changeAdmin: function(e) {
var element = $(e.currentTarget);
if(element.is(':checked')) {
this.model.set('is_admin', true);
} else {
this.model.set('is_admin', false);
}
},
doAdmin: function() {
var self = this;
var notify = new Pops.Views.ConfirmationView({
message : "Are you sure?"
});
$.when(notify.render().promise)
.then(function() {
console.log("the user wants to change the admin");
}).fail(function() {
console.log("the user does not want to change the admin");
});
}
});
所以目前,我只是想记录用户想要做的事情,这是我的确认视图,
'use strict'
App.Views.ConfirmationView = Backbone.View.extend({
tagName: 'div',
className: 'notification',
template: _.template( $('#tpl-cofirmation').html() ),
initialize: function(options) {
this.options = options;
console.log(this);
},
events: {
"click .js-cancel" : "cancel",
"click .js-confirm": "confirm"
},
render: function() {
//var self = this;
console.log(this);
this.$el.html(this.template({
message: this.options.message
})).css({'z-index':'9999', 'position':'absolute', 'padding':'10px', 'background':'#fff'}).prependTo('.app');
this.deferred = $.Deferred();
return this.deferred;
},
cancel: function() {
this.$el.hide();
this.deferred.reject();
},
confirm: function() {
this.$el.hide();
this.deferred.resolve();
}
});
我遇到的问题是,无论我在确认模型视图中点击什么,我总是给出积极的回应并记录“用户想要更改管理员” - 我真的很新推迟了任何帮助都会很棒!
答案 0 :(得分:0)
我认为.then()总是在$ .when上调用。你试过.done()而不是.then吗?
答案 1 :(得分:0)
我并不是说你不能或不应该使用承诺但是你考虑过使用Backbone的内置事件功能吗?例如,您可以从ConfirmationView触发事件,该事件将需要记录到控制台的特定消息传递回UserInitialsWithAdminView。