2012-02-12 2 views
0

Пробовал обновлять сетку 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

И я смотрел Берк 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: "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 –

ответ

1

Некоторые больше исследований, и я получил это работает, как это ...

Я добавил маршрут переопределять 7 RESTful маршрутов что Rails дает вам по умолчанию. В вашем routes.rb файлов, добавьте эту строку ...

match 'users' => 'users#update', :via => :put 

Который в основном говорит, что мы будем обрабатывать все путы, перейдя к определению обновления на контроллере.

Теперь в определении контроллера вы хотите обработать обновление несколько иначе, так как оно не является RESTful. Вы должны сначала разобрать JSON, что вы отправляете через parameterMap, а затем итерацию по объектам обновляемых с объектом атрибутов ...

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

Эй, Берк, вы, да, человек! Спасибо за помощь, отлично работает сейчас (и я действительно наслаждаюсь материалом Kendo) – PhillipKregg

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 
    } 
});