response param in display method
This commit is contained in:
@ -4,6 +4,7 @@ X-editable changelog
|
|||||||
|
|
||||||
Version 1.3.1 wip
|
Version 1.3.1 wip
|
||||||
----------------------------
|
----------------------------
|
||||||
|
[enh] 'display' method: added param 'response' allowing to show text directly from server (vitalets)
|
||||||
[enh] new util method `$.fn.editableutils.itemsByValue` to easily get selected items for sourced-inputs (vitalets)
|
[enh] new util method `$.fn.editableutils.itemsByValue` to easily get selected items for sourced-inputs (vitalets)
|
||||||
[enh] convert newlines to <br> in error message for more pretty display (vitalets)
|
[enh] convert newlines to <br> in error message for more pretty display (vitalets)
|
||||||
[enh #57] remove css height for textarea (vitalets)
|
[enh #57] remove css height for textarea (vitalets)
|
||||||
|
@ -112,18 +112,20 @@ Makes editable any HTML element on the page. Applied as jQuery method.
|
|||||||
Can call custom display method from options.
|
Can call custom display method from options.
|
||||||
Can return deferred object.
|
Can return deferred object.
|
||||||
@method render()
|
@method render()
|
||||||
|
@param {mixed} response server response (if exist) to pass into display function
|
||||||
*/
|
*/
|
||||||
render: function() {
|
render: function(response) {
|
||||||
//do not display anything
|
//do not display anything
|
||||||
if(this.options.display === false) {
|
if(this.options.display === false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if it is input with source, we pass callback in third param to be called when source is loaded
|
//if it is input with source, we pass callback in third param to be called when source is loaded
|
||||||
if(this.input.options.hasOwnProperty('source')) {
|
if(this.input.options.hasOwnProperty('source')) {
|
||||||
return this.input.value2html(this.value, this.$element[0], this.options.display);
|
return this.input.value2html(this.value, this.$element[0], this.options.display, response);
|
||||||
//if display method defined --> use it
|
//if display method defined --> use it
|
||||||
} else if(typeof this.options.display === 'function') {
|
} else if(typeof this.options.display === 'function') {
|
||||||
return this.options.display.call(this.$element[0], this.value);
|
return this.options.display.call(this.$element[0], this.value, response);
|
||||||
//else use input's original value2html() method
|
//else use input's original value2html() method
|
||||||
} else {
|
} else {
|
||||||
return this.input.value2html(this.value, this.$element[0]);
|
return this.input.value2html(this.value, this.$element[0]);
|
||||||
@ -298,8 +300,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
|
|||||||
this.$element.removeClass('editable-unsaved');
|
this.$element.removeClass('editable-unsaved');
|
||||||
}
|
}
|
||||||
|
|
||||||
// this.hide();
|
this.setValue(params.newValue, false, params.response);
|
||||||
this.setValue(params.newValue);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Fired when new value was submitted. You can use <code>$(this).data('editable')</code> to access to editable instance
|
Fired when new value was submitted. You can use <code>$(this).data('editable')</code> to access to editable instance
|
||||||
@ -329,7 +330,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
|
|||||||
@param {mixed} value new value
|
@param {mixed} value new value
|
||||||
@param {boolean} convertStr whether to convert value from string to internal format
|
@param {boolean} convertStr whether to convert value from string to internal format
|
||||||
**/
|
**/
|
||||||
setValue: function(value, convertStr) {
|
setValue: function(value, convertStr, response) {
|
||||||
if(convertStr) {
|
if(convertStr) {
|
||||||
this.value = this.input.str2value(value);
|
this.value = this.input.str2value(value);
|
||||||
} else {
|
} else {
|
||||||
@ -338,7 +339,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
|
|||||||
if(this.container) {
|
if(this.container) {
|
||||||
this.container.option('value', this.value);
|
this.container.option('value', this.value);
|
||||||
}
|
}
|
||||||
$.when(this.render())
|
$.when(this.render(response))
|
||||||
.then($.proxy(function() {
|
.then($.proxy(function() {
|
||||||
this.handleEmpty();
|
this.handleEmpty();
|
||||||
}, this));
|
}, this));
|
||||||
@ -547,11 +548,21 @@ Makes editable any HTML element on the page. Applied as jQuery method.
|
|||||||
value: null,
|
value: null,
|
||||||
/**
|
/**
|
||||||
Callback to perform custom displaying of value in element's text.
|
Callback to perform custom displaying of value in element's text.
|
||||||
If `null`, default input's value2html() will be called.
|
If `null`, default input's display used.
|
||||||
If `false`, no displaying methods will be called, element's text will never change.
|
If `false`, no displaying methods will be called, element's text will never change.
|
||||||
Runs under element's scope.
|
Runs under element's scope.
|
||||||
Second parameter __sourceData__ is passed for inputs with source (select, checklist). To get currently selected items
|
_Parameters:_
|
||||||
use `$.fn.editableutils.itemsByValue(value, sourceData)` function.
|
|
||||||
|
* `value` current value to be displayed
|
||||||
|
* `response` server response (if display called after ajax submit), since 1.3.1
|
||||||
|
|
||||||
|
For **inputs with source** (select, checklist) parameters are different:
|
||||||
|
|
||||||
|
* `value` current value to be displayed
|
||||||
|
* `sourceData` array of items for current input (e.g. dropdown items)
|
||||||
|
* `response` server response (if display called after ajax submit), since 1.3.1
|
||||||
|
|
||||||
|
To get currently selected items use `$.fn.editableutils.itemsByValue(value, sourceData)`.
|
||||||
|
|
||||||
@property display
|
@property display
|
||||||
@type function|boolean
|
@type function|boolean
|
||||||
@ -565,9 +576,9 @@ Makes editable any HTML element on the page. Applied as jQuery method.
|
|||||||
|
|
||||||
if(checked.length) {
|
if(checked.length) {
|
||||||
$.each(checked, function(i, v) { html.push($.fn.editableutils.escape(v.text)); });
|
$.each(checked, function(i, v) { html.push($.fn.editableutils.escape(v.text)); });
|
||||||
$(element).html(html.join(', '));
|
$(this).html(html.join(', '));
|
||||||
} else {
|
} else {
|
||||||
$(element).empty();
|
$(this).empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
**/
|
**/
|
||||||
|
@ -34,12 +34,12 @@ List - abstract class for inputs that have source option loaded from js array or
|
|||||||
return null; //can't set value by text
|
return null; //can't set value by text
|
||||||
},
|
},
|
||||||
|
|
||||||
value2html: function (value, element, display) {
|
value2html: function (value, element, display, response) {
|
||||||
var deferred = $.Deferred(),
|
var deferred = $.Deferred(),
|
||||||
success = function () {
|
success = function () {
|
||||||
if(typeof display === 'function') {
|
if(typeof display === 'function') {
|
||||||
//custom display method
|
//custom display method
|
||||||
display.call(element, value, this.sourceData);
|
display.call(element, value, this.sourceData, response);
|
||||||
} else {
|
} else {
|
||||||
this.value2htmlFinal(value, element);
|
this.value2htmlFinal(value, element);
|
||||||
}
|
}
|
||||||
|
@ -546,12 +546,19 @@ $(function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
asyncTest("'display' callback", function () {
|
asyncTest("'display' callback", function () {
|
||||||
var e = $('<a href="#" data-type="select" data-value="2" data-url="post.php"></a>').appendTo(fx).editable({
|
var req = 0,
|
||||||
|
e = $('<a href="#" data-type="select" data-value="2" data-url="post.php"></a>').appendTo(fx).editable({
|
||||||
pk: 1,
|
pk: 1,
|
||||||
source: groups,
|
source: groups,
|
||||||
display: function(value, sourceData) {
|
display: function(value, sourceData, response) {
|
||||||
var els = $.grep(sourceData, function(o) {return o.value == value;});
|
var els = $.grep(sourceData, function(o) {return o.value == value;});
|
||||||
$(this).text('qq' + els[0].text);
|
$(this).text('qq' + els[0].text);
|
||||||
|
if(req == 0) {
|
||||||
|
ok(response === undefined, 'response param undefined on first request');
|
||||||
|
req++;
|
||||||
|
} else {
|
||||||
|
ok(response.success, 'response param ok on second request');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
selected = 3;
|
selected = 3;
|
||||||
|
@ -395,8 +395,9 @@ $(function () {
|
|||||||
asyncTest("'display' callback", function () {
|
asyncTest("'display' callback", function () {
|
||||||
var newText = 'cd<e>;"',
|
var newText = 'cd<e>;"',
|
||||||
e = $('<a href="#" data-pk="1" data-url="post.php" data-name="text1">abc</a>').appendTo(fx).editable({
|
e = $('<a href="#" data-pk="1" data-url="post.php" data-name="text1">abc</a>').appendTo(fx).editable({
|
||||||
display: function(value) {
|
display: function(value, response) {
|
||||||
ok(this === e[0], 'scope is ok');
|
ok(this === e[0], 'scope is ok');
|
||||||
|
ok(response.success, 'response param ok');
|
||||||
$(this).text('qq'+value);
|
$(this).text('qq'+value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user