【问题标题】:Backgrid.JS: How to push edits to server as POST requests to PHPBackgrid.JS:如何将编辑推送到服务器作为对 PHP 的 POST 请求
【发布时间】:2015-05-06 11:55:10
【问题描述】:

我有一个可编辑的表格。下面是一个渲染表格的函数,给定表格要渲染到的元素 ID、列数组和控制器名称,用于构建 URL。 URL 的格式如下,其中 exampleController 是一个示例控制器:

  • 要更新:php/gateway.php?sender=exampleController&action=update
  • 要列出:php/gateway.php?sender=exampleController&action=list

我希望 POST 请求包含已编辑的信息以及相应的行。

我尝试在下面的代码中做(某事)。它发出请求,但不包括 POST。

var initiateGrid = function(element_id, columns, controllerName) {
    var gridModel = Backbone.Model.extend({

        initialize: function() {
            Backbone.Model.prototype.initialize.apply(this, arguments);
            this.on("change", function(model, options) {
                if (options && options.save === false) {
                    return;
                }
                this.sync();
            });
        },
        sync: function(method, model, options) {
            var methodUpdateMethodUrl = 'php/gateway.php?sender=' + controllerName + '&action=update';
            options = options || {};
            options.url = methodUpdateMethodUrl;
            Backbone.sync(method, model, options);
        }
    });

    var gridCollectionModel = Backbone.Collection.extend({
        model: gridModel,
        url: 'php/gateway.php?sender=' + controllerName + '&action=list',
    });

    var gridCollection = new gridCollectionModel();

    var grid = new Backgrid.Grid({
        columns: columns,
        collection: gridCollection,
        emptyText: "No Data"
    });

    var gridContainer = $("#" + element_id);
    gridContainer.append(grid.render().el);

    gridCollection.fetch({
        reset: true
    });

};

当然还有这个错误:

未捕获的类型错误:无法读取未定义的属性“触发器”

【问题讨论】:

    标签: javascript backbone.js backgrid


    【解决方案1】:

    尝试更改网址

    url:function() { return 'php/gateway.php?sender=' + controllerName + '&action=list', }

    【讨论】:

      【解决方案2】:

      以下代码对我有用:

      var initiateGrid = function(element_id, columns, controllerName) {
      
          var gridModel = Backbone.Model.extend({
      
              initialize: function() {
                  Backbone.Model.prototype.initialize.apply(this, arguments);
                  this.on("change", function(model, options) {
                      this.sync("update", model, options);
                  });
              },
              sync: function(method, model, options) {
                  var methodUrl = {
                      'update': 'php/gateway.php?sender=' + controllerName + '&action=update'
                  };
                  console.log(method, model, options);
                  if (methodUrl && methodUrl[method.toLowerCase()]) {
                      options = options || {};
                      options.url = methodUrl[method.toLowerCase()];
                  }
                  Backbone.sync(method, model, options);
              }
          });
      
          var gridCollectionModel = Backbone.Collection.extend({
              model: gridModel,
              url: 'php/gateway.php?sender=' + controllerName + '&action=list',
          });
      
          var gridCollection = new gridCollectionModel();
      
          var grid = new Backgrid.Grid({
              columns: columns,
              collection: gridCollection,
              emptyText: "No Data"
          });
      
          var gridContainer = $("#" + element_id);
          gridContainer.append(grid.render().el);
      
          gridCollection.fetch({
              reset: true
          });
      
      };
      

      和PHP得到一个数组:

      function get_form_data() {
          $dump = json_decode(file_get_contents('php://input'));
          $transfer_info = array();
          foreach ($dump as $key => $value) {
              $transfer_info[$key] = $value;
          }
          return $transfer_info;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-29
        • 1970-01-01
        相关资源
        最近更新 更多