Kendo UI Grid - 更新不会持续

问题描述:

一直试图在Kendo网格上进行更新,并遇到问题。Kendo UI Grid - 更新不会持续

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

而且我看了关于如何设置网格使用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: "https://stackoverflow.com/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

你如何设置处理后端的PUT?由于您正在批量发送数据,因此您必须以不同的方式处理它。也许检查这个帖子? http://stackoverflow.com/questions/1507011/bulk-update-objects-using-form-in-rails – 2012-02-13 20:30:58

一些更多的研究,我已经得到了它的工作是这样的...

我加入到覆盖7个REST风格的路由的路由Rails默认给你。在你的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 
+0

嘿伯克 - 你达人!感谢您的帮助,现在工作很好(我真的很喜欢剑道的东西) – PhillipKregg 2012-02-14 01:46:45

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