骨干。模型属性在Model.save()上未定义;

时间:2014-07-08 09:15:10

标签: backbone.js

我尝试在设置属性后保存模型。但是当我在控制台中查看时,我发现所有属性都未定义。这里的任何人可以帮助我吗?

这是我的模特:

PostModel = Backbone.Model.extend({ 

url: "api/?action=answerQuestion&question_id="+this.questionId+"&option_id="+this.optionId+"&type="+this.role,

defaults: {
    questionId: 0,
    optionId: 0,
    role: 0
},

initialize: function(){

}

});

这是我要保存/发布它的功能。

        answerQuestion: function(event) {
    event.preventDefault();
    $('li').each(function(e) {
        $(this).addClass('inactive');
    });
    $(event.currentTarget).removeClass('inactive').addClass('active');

    var currentQuestion = 1;
    var answer = parseInt($(event.currentTarget).find('a').attr('data-answer'));
    var role = 1;

    var postModel = new PostModel();
    postModel.set({ 
        questionId: currentQuestion, 
        optionId: answer, 
        role: role
    });

    postModel.save();
}

1 个答案:

答案 0 :(得分:1)

您不应该使用this.questionId来获取Backbone中的模型属性;请改用this.get('questionId')

这是问题的一部分,但如果您只是更新定义以使用url,那么您的this.get()媒体资源中仍会显示空值。如果您将url设置为字符串,则在创建模型时定义模型 - ,并且在数据更改时不会更新。

幸运的是,Backbone lets you define url as a function too,它会做你期望的事情:

var PostModel = Backbone.Model.extend({ 
    url: function() { 
        return "/api?action=answerQuestion" + 
            "&question_id=" + this.get('questionId') + 
            "&option_id=" + this.get('optionId') + 
            "&type=" + this.get('role');
    },  

    defaults: {
        questionId: 0,
        optionId: 0,
        role: 0
    }
});