我尝试在设置属性后保存模型。但是当我在控制台中查看时,我发现所有属性都未定义。这里的任何人可以帮助我吗?
这是我的模特:
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();
}
答案 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
}
});