【问题标题】:Kendo UI Grid - Update not persistingKendo UI Grid - 更新不持久
【发布时间】:2012-02-12 23:40:53
【问题描述】:

一直在尝试更新剑道网格,但遇到了问题。

我使用 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

一定有什么我没有做对,但我只是没有看到它。

这是我与剑道相关的代码:

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



                    ]


                });  

【问题讨论】:

标签: javascript jquery ruby-on-rails ruby-on-rails-3 kendo-ui


【解决方案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

【讨论】:

  • 嘿伯克 - 你这个男人!感谢您的帮助,现在效果很好(我真的很喜欢剑道的东西)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2018-03-12
    • 1970-01-01
    相关资源
    最近更新 更多