骨干和用户确认 - jquery延迟和承诺

时间:2014-11-19 18:17:02

标签: jquery backbone.js promise jquery-deferred

我第一次使用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();
}

});

我遇到的问题是,无论我在确认模型视图中点击什么,我总是给出积极的回应并记录“用户想要更改管理员” - 我真的很新推迟了任何帮助都会很棒!

2 个答案:

答案 0 :(得分:0)

我认为.then()总是在$ .when上调用。你试过.done()而不是.then吗?

http://api.jquery.com/jquery.when/

答案 1 :(得分:0)

我并不是说你不能或不应该使用承诺但是你考虑过使用Backbone的内置事件功能吗?例如,您可以从ConfirmationView触发事件,该事件将需要记录到控制台的特定消息传递回UserInitialsWithAdminView。