[#384, slickgrid][s]: slickgrid add support for row-delete

This commit is contained in:
aliounedia
2014-01-16 00:27:04 +01:00
parent 7fbab3d8d8
commit ba8a84f748

View File

@@ -55,13 +55,8 @@ my.SlickGrid = Backbone.View.extend({
); );
this.state = new recline.Model.ObjectState(state); this.state = new recline.Model.ObjectState(state);
this._slickHandler = new Slick.EventHandler(); this._slickHandler = new Slick.EventHandler();
}, },
events: {
},
onRecordChanged: function(record) { onRecordChanged: function(record) {
// Ignore if the grid is not yet drawn // Ignore if the grid is not yet drawn
if (!this.grid) { if (!this.grid) {
@@ -74,10 +69,8 @@ my.SlickGrid = Backbone.View.extend({
this.grid.getData().updateItem(record, row_index); this.grid.getData().updateItem(record, row_index);
this.grid.render(); this.grid.render();
}, },
render: function() {
render: function() {
var self = this; var self = this;
var options = _.extend({ var options = _.extend({
enableCellNavigation: true, enableCellNavigation: true,
enableColumnReorder: true, enableColumnReorder: true,
@@ -88,15 +81,23 @@ my.SlickGrid = Backbone.View.extend({
// We need all columns, even the hidden ones, to show on the column picker // We need all columns, even the hidden ones, to show on the column picker
var columns = []; var columns = [];
// custom formatter as default one escapes html // custom formatter as default one escapes html
// plus this way we distinguish between rendering/formatting and computed value (so e.g. sort still works ...) // plus this way we distinguish between rendering/formatting and computed value (so e.g. sort still works ...)
// row = row index, cell = cell index, value = value, columnDef = column definition, dataContext = full row values // row = row index, cell = cell index, value = value, columnDef = column definition, dataContext = full row values
var formatter = function(row, cell, value, columnDef, dataContext) { var formatter = function(row, cell, value, columnDef, dataContext) {
var field = self.model.fields.get(columnDef.id); // If row delete field format , change here if for example insteed
// of link we can have bouton or image depending of what you need
// RUFFUS! Do you think we should have a variable to set if
// ie template_del = '<a href="#" class="recline-column-delete">X</a>'
if (columnDef.id == "del"){
return '<a href="#" class="recline-column-delete">X</a>'
}
var field = self.model.fields.get(columnDef.id);
if (field.renderer) { if (field.renderer) {
return field.renderer(value, field, dataContext); return field.renderer(value, field, dataContext);
} else { }else {
return value; return value
} }
}; };
@@ -112,6 +113,16 @@ my.SlickGrid = Backbone.View.extend({
} }
} }
}; };
//Add row delete support
columns.push({
id: 'del',
name: 'del',
field: 'del',
sortable: true,
width: 10,
formatter: formatter,
validator:validator
})
_.each(this.model.fields.toJSON(),function(field){ _.each(this.model.fields.toJSON(),function(field){
var column = { var column = {
id: field.id, id: field.id,
@@ -205,6 +216,7 @@ my.SlickGrid = Backbone.View.extend({
rows[i] = toRow(m); rows[i] = toRow(m);
models[i] = m; models[i] = m;
}; };
} }
var data = new RowSet(); var data = new RowSet();
@@ -250,16 +262,22 @@ my.SlickGrid = Backbone.View.extend({
this._slickHandler.subscribe(this.grid.onCellChange, function (e, args) { this._slickHandler.subscribe(this.grid.onCellChange, function (e, args) {
// We need to change the model associated value // We need to change the model associated value
//
var grid = args.grid; var grid = args.grid;
var model = data.getModel(args.row); var model = data.getModel(args.row);
var field = grid.getColumns()[args.cell].id; var field = grid.getColumns()[args.cell].id;
var v = {}; var v = {};
v[field] = args.item[field]; v[field] = args.item[field];
model.set(v); model.set(v);
}); });
this._slickHandler.subscribe(this.grid.onClick,function(e, args){
if (args.cell == 0){
// We need to delete the associated model
var model = data.getModel(args.row);
model.destroy()
}
}) ;
var columnpicker = new Slick.Controls.ColumnPicker(columns, this.grid, var columnpicker = new Slick.Controls.ColumnPicker(columns, this.grid,
_.extend(options,{state:this.state})); _.extend(options,{state:this.state}));
if (self.visible){ if (self.visible){