【发布时间】:2014-11-20 03:55:25
【问题描述】:
我第一次使用 jQuery defer 和 promises,我遇到了一些困惑,我希望有人为我澄清一下,我有一个复选框,它决定了 a模型属性。我想在用户检查此输入时进行确认,并根据肯定或否定响应从那里开始。
到目前为止,我的模型视图中有这个,
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();
}
});
我遇到的问题是,无论我在确认中单击什么,模型视图总是我给出积极响应并记录“用户想要更改管理员” - 我真的是推迟事情的新手所以任何帮助都会很棒!
【问题讨论】:
标签: jquery backbone.js promise jquery-deferred