'use strict'; define( [ 'backgrid' ], function (Backgrid) { return Backgrid.Cell.extend({ _originalInit: Backgrid.Cell.prototype.initialize, initialize: function () { this._originalInit.apply(this, arguments); this.cellValue = this._getValue(); this.listenTo(this.model, 'change', this._refresh); if (this._onEdit) { this.listenTo(this.model, "backgrid:edit", function (model, column, cell, editor) { if (column.get("name") == this.column.get("name")) { this._onEdit(model, column, cell, editor); } }); } }, _refresh: function () { this.cellValue = this._getValue(); this.render(); }, _getValue: function () { var cellValue = this.column.get('cellValue'); if (cellValue) { if (cellValue === 'this') { return this.model; } } var name = this.column.get('name'); if (name === 'this') { return this.model; } var value = this.model.get(name); if (!value) { return undefined; } //if not a model if (!value.get && typeof value === 'object') { value = new Backbone.Model(value); } return value; } }); });