0

剣道グリッドを更新しようとしていて、問題が発生しています。

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.c​​om/web/grid/ editing.html

また、Rails で動作するようにグリッドをセットアップする方法についての Burke Hollands のビデオを見ました: 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"
                    },



                    ]


                });  
4

2 に答える 2

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
    }
});
于 2012-07-02T04:31:26.973 に答える
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
于 2012-02-13T21:32:54.763 に答える