我正在使用这个'CloudEdit'骨干教程http://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/,它允许您创建一个带有“标题”和“正文”属性的“文档”。它使用Rails后端将数据保存到“文档”URL,并通过EditView创建/编辑文档。总而言之,即使在每次保存时触发this.model.save()上的EditView中的成功回调,并且即使视图中的console.log()消息显示“标题”和'body'属性是使用在表单上输入的值设置的,当我检查数据库时,大多数记录对于标题和正文都有'null',而只有少数记录实际上具有输入的值。当我尝试添加更多记录时,此模式仍在继续,而数据库中没有大约4/5显示null。根据下面的代码,你能看出原因可能是什么,以及我如何解决它?
注意,数据库显示大多数记录的标题和正文属性为空,即这不是骨干不能正确检索数据的问题。它没有得到妥善保存。 的模型
window.Document = Backbone.Model.extend({
url : function() {
var base = 'documents';
if (this.isNew()) return base;
return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
}
});
查看 var EditView = Backbone.View.extend({ 事件:{ “提交表格”:“保存” },
initialize: function() {
this.render();
},
save: function() {
var self = this;
var msg = this.model.isNew() ? 'Successfully created!' : "Saved!";
var tit = this.$('[name=title]').val();
console.log(tit);
var bod = this.$('[name=body]').val();
console.log(bod);
this.model.save({ title: this.$('[name=title]').val(), body: this.$('[name=body]').val() }, {
success: function(model, resp) {
// new App.Views.Notice({ message: msg });
console.log("save");
self.model = model;
self.delegateEvents();
},
error: function(r) {
console.log(r);
}
});
return false;
},
render: function() {
...template rendering code...
}
});
更新回应
的评论这是documents_controller.rb
的创建操作respond_to :json
...code ommitted...
def create
puts params
respond_with Document.create(:document => params[:document])
end
然而,这就是看跌期权所揭示的内容,有关于大量分配受保护属性的警告。但是,“文档”甚至不是模型的属性。
Processing by DocumentsController#create as JSON
Parameters: {"title"=>"hop", "body"=>"hot", "document"=>{"title"=>"hop", "body"=>"hot"}}
WARNING: Can't mass-assign protected attributes: document
(0.1ms) begin transaction
SQL (80.4ms) INSERT INTO "documents" ("body", "created_at", "title", "updated_at") VALUES (?, ?, ?, ?) [["body", nil], ["created_at", Fri, 25 Jan 2013 23:20:51 UTC +00:00], ["title", nil], ["updated_at", Fri, 25 Jan 2013 23:20:51 UTC +00:00]]
(7.3ms) commit transaction
Completed 201 Created in 127ms (Views: 31.9ms | ActiveRecord: 0.0ms)
根据以下表单输入重写了这样的创建动作
def create
respond_with Document.create(:title => params[:title], :body => params[:body])
end
#form input names
<input name='title' type='text'/>
<textarea name='body'>