update: function()

in js/projection/editable.js [68:116]


    update: function (options) {
      if (BaseProjection.prototype.update.call(this, options)) {
        var model = this.src.data;
        var columns = model.get('columns');
        var iconClasses = this.get('editable.icon.class');
        var tooltipText = this.get('editable.tooltip.text');
        var editableTemplate = this.get('editable.template');

        _.each(this.viewConfig, function (view, key) {
          var column = columns[key] || { property: key };
          var $metadata = column.$metadata = column.$metadata || {};
          var attrBody = $metadata['attr.body'] = $metadata['attr.body'] || {};
          var className = attrBody.class || [];

          if (_.isString(className)) {
            className = className.split(/\s+/);
          }
          attrBody.class = _.union(className, ['grid-editable-cell']);

          columns[key] = column;
        });

        var value = _.map(model.get('value'), function (item) {
          return isReadonlyRow(item) ? item : _.mapObject(item, function (value, key) {
            if (this.isEditable(key, item)) {
              var $html = null;
              var text = null;

              if (_.isObject(value)) {
                $html = value.$html;
              } else {
                text = value;
                value = {};
              }

              value.$html = editableTemplate({
                $html: $html,
                text: text,
                tooltipText: tooltipText,
                classes: iconClasses,
              });
            }
            return value;
          }, this);
        }, this);

        this.patch({ value: value });
      }
    },