保存特定主幹模型時,我注意到當我檢查服務器上的PUT請求時,其中一個字段丟失。我有這樣的模式:Backbone.js保存方法將某些模型的屬性丟棄到服務器上PUT/POST
App.Models.User = Backbone.Model.extend({
name: "user",
url: function() {
u = "/users"
if (this.id) {
u += "/" + this.id;
}
return u;
}
});
App.Collections.Users = Backbone.Collection.extend({
urlRoot: "/users",
model: App.Models.User
});
我將它保存在瀏覽像這樣:
App.Views.EditUserForm = Backbone.View.extend({
events: {
"submit": "saveUser"
},
saveUser: function(e) {
e.preventDefault();
var _id = this.$("#user_id").val();
var data = {
id: (_id !== '') ? _id : null,
first_name: this.$("#user_first_name").val(),
last_name: this.$("#user_last_name").val(),
email: this.$("#user_email").val(),
bio: this.$("#user_bio").val()
};
var _this = this;
var user = new App.Models.User();
// This will create or update a user
// record on the server
user.save(data,{
success: _this.handleSuccess,
error: _this.handleErrors
});
},
handleSuccess: function(user, resp) { /* ... */ },
handleErrors: function(user, resp) { /* ... */ }
});
然而,當我到了服務器端(滑軌),該bio
場是不是在要求的PARAMS:
(debugger) params[:user].keys
[ "first_name", "last_name", "email" ]
這bio
字段允許爲空,但使用在客戶端的調試器,我可以看到它的權利之前已在data = {...}
對象的值被髮送到保存方法。
> data.bio
"something, somthing, dark side"
我還可以看到,當我使用收集到服務器上獲取現有對象,那場可用和填充。只有'model.save()'方法會將此值放在某個位置。任何想法爲什麼?謝謝。
更新 -
我可以看到bio
場被髮送到服務器,但它不是在params[:user]
而是在params哈希表的根:
(debugger) ap params
{
"id" => "1",
"first_name" => "John",
"last_name" => "Doe",
"email" => "[email protected]",
"bio" => "something, somthing, dark side",
"user" => {
"first_name" => "John",
"last_name" => "Doe",
"email" => "[email protected]",
},
"controller" => "users",
"action" => "update"
}
什麼決定params [:user] *下的是什麼?
*對不起,如果這是更多的軌道問題比主幹。