剑道UI网格-更新不持久

Kendo UI Grid - Update not persisting

本文关键字:更新 不持久 网格 UI 剑道      更新时间:2023-09-26

我一直在尝试对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&上下文=C3f358ceADOEgsToPDskKlwC22A9IkOjYnQhYyY9HI

肯定有什么事情我做得不对,但我就是没看到

这是我的代码,适用于剑道的东西:

           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"
                    },

                    ]

                });  

再做一些研究,我就这样做了。。。

我添加了一个路由来覆盖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

您也可以修改您的数据源,因为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
    }
});