尝试在Kendo网格上进行更新,我遇到了问题。
我正在使用Rails作为后端,当我进行更新时,服务器似乎显示一切正常:
Started PUT "/" for 127.0.0.1 at 2012-02-12 17:28:19 -0600
Processing by HomeController#index as
Parameters: {"models"=>"[{\"created_at\":\"2012-02-08T17:34:50Z\",
\"first_name\":\"Milla\",\"id\":2,\"last_name\":\"sfasfsdf\",\"password\":\"\",
\"updated_at\":\"2012-02-08T17:34:50Z\",\"user_name\"
:\"\"}]"}
Rendered home/index.html.erb within layouts/application (3.0ms)
Completed 200 OK in 89ms (Views: 88.0ms | ActiveRecord: 0.0ms)
然而,当我刷新视图时,没有任何改变。当我检查数据库时,当然也没有发生任何变化。
我在这里阅读了有关如何在网格中进行编辑的文档:http://demos.kendoui.com/web/grid/editing.html
我观看了Burke Hollands关于如何设置网格以使用Rails的视频:http://www.youtube.com/watch?v=FhHMOjN0Bjc&context=C3f358ceADOEgsToPDskKlwC22A9IkOjYnQhYyY9HI
一定有些事我做得不对,但我只是没有看到它。
这是我使用Kendo的代码:
var User = kendo.data.Model.define({
id: "id",
fields: {
first_name: { validation: { required: true } },
last_name: { validation: { required: true } }
}
});
var UsersData = new kendo.data.DataSource({
transport: {
read: {
url: "/users.json"
},
create: {
url: "/users/create.json",
type: "POST"
},
update: {
type: "PUT"
},
destroy: {
type: "DELETE"
},
parameterMap: function(options, operation) {
if (operation !== "read" && options.models) {
return {models: kendo.stringify(options.models)};
}
}
},
batch: true,
pageSize: 5,
schema: {
model: User
}
});
$("#users-grid").kendoGrid({
dataSource: UsersData,
navigatable: true,
editable: true,
selectable: true,
pageable: true,
sortable: true,
toolbar: ["create", "save", "cancel"],
columns: [
{
field: "first_name",
title: "First Name"
},
{
field: "last_name",
title: "Last Name"
},
]
});
答案 0 :(得分:1)
更多的研究,我已经让它像这样工作......
我添加了一条路由来覆盖Rails默认提供的7条RESTful路由。在Routes.rb文件中,添加以下行...
match 'users' => 'users#update', :via => :put
这基本上说我们将通过转到控制器上的更新定义来处理所有看跌期权。
现在在控制器定义中,您希望以不同的方式处理更新,因为它不是RESTful。您需要首先解析您通过parameterMap发送的JSON,然后使用对象属性迭代更新对象...
def update
respond_to do |format|
@users = JSON.parse(params[:models])
@users.each do |u|
user = User.find(u["id"])
unless user.nil?
user.update_attributes u
end
end
format.json { head :no_content }
end
end
答案 1 :(得分:1)
您还可以修改数据源,因为url键可以使用函数:
var UsersData = new kendo.data.DataSource({
transport: {
read: {
url: '/users.json',
dataType: 'json'
},
update: {
url: function (o) {
return '/users/' + o.id + '.json'
},
dataType: 'json',
type: 'PUT'
},
destroy: {
url: function (o) {
return '/users/' + o.id + '.json'
},
dataType: 'json',
type: 'DELETE',
},
create: {
url: '/users.json',
dataType: 'json',
type: 'POST'
},
parameterMap: function(options, operation) {
if (operation !== "read" && options.models) {
return {models: kendo.stringify(options.models)};
}
}
},
batch: true,
pageSize: 5,
schema: {
model: User
}
});