Skip to content

Commit

Permalink
Merge branch 'optionsText' of https://github.com/mattwright/knockout
Browse files Browse the repository at this point in the history
…into mattwright-optionsText
  • Loading branch information
SteveSanderson committed Jan 16, 2011
2 parents e1eed45 + deeb2e6 commit 0f30933
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 5 deletions.
3 changes: 2 additions & 1 deletion build/output/knockout-latest.debug.js
Expand Up @@ -1234,7 +1234,7 @@ ko.bindingHandlers['options'] = {
for (var i = 0, j = value.length; i < j; i++) {
var option = document.createElement("OPTION");
var optionValue = typeof allBindings['optionsValue'] == "string" ? value[i][allBindings['optionsValue']] : value[i];
var optionText = typeof allBindings['optionsText'] == "string" ? value[i][allBindings['optionsText']] : optionValue;
var optionText = typeof allBindings['optionsText'] == "function" ? allBindings['optionsText'](value[i]) : (typeof allBindings['optionsText'] == "string" ? value[i][allBindings['optionsText']] : optionValue);
optionValue = ko.utils.unwrapObservable(optionValue);
optionText = ko.utils.unwrapObservable(optionText);
ko.selectExtensions.writeValue(option, optionValue);
Expand Down Expand Up @@ -1404,6 +1404,7 @@ ko.bindingHandlers['checked'] = {
}
}
};

ko.templateEngine = function () {
this['renderTemplate'] = function (templateName, data, options) {
throw "Override renderTemplate in your ko.templateEngine subclass";
Expand Down
2 changes: 1 addition & 1 deletion build/output/knockout-latest.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 12 additions & 1 deletion spec/defaultBindingsBehaviors.js
Expand Up @@ -327,6 +327,17 @@ describe('Binding: Options', {
value_of(displayedValues).should_be([6, 13]);
},

'Should accept function in optionsText param to display subproperties of the model values': function() {
var modelValues = new ko.observableArray([
{ name: 'bob', job: 'manager' },
{ name: 'frank', job: 'coder' }
]);
testNode.innerHTML = "<select data-bind='options:myValues, optionsText: function (v) { return v[\"name\"] + \" (\" + v[\"job\"] + \")\"; }, optionsValue: \"id\"'><option>should be deleted</option></select>";
ko.applyBindings({ myValues: modelValues }, testNode);
var displayedText = ko.utils.arrayMap(testNode.childNodes[0].childNodes, function (node) { return node.innerHTML; });
value_of(displayedText).should_be(["bob (manager)", "frank (coder)"]);
},

'Should update the SELECT node\'s options if the model changes': function () {
var observable = new ko.observableArray(["A", "B", "C"]);
testNode.innerHTML = "<select data-bind='options:myValues'><option>should be deleted</option></select>";
Expand Down Expand Up @@ -598,4 +609,4 @@ describe('Binding: Checked', {
ko.utils.triggerEvent(testNode.childNodes[0], "click");
value_of(model.someProp).should_be("this radio button value");
}
});
});
4 changes: 2 additions & 2 deletions src/binding/defaultBindings.js
Expand Up @@ -154,7 +154,7 @@ ko.bindingHandlers['options'] = {
for (var i = 0, j = value.length; i < j; i++) {
var option = document.createElement("OPTION");
var optionValue = typeof allBindings['optionsValue'] == "string" ? value[i][allBindings['optionsValue']] : value[i];
var optionText = typeof allBindings['optionsText'] == "string" ? value[i][allBindings['optionsText']] : optionValue;
var optionText = typeof allBindings['optionsText'] == "function" ? allBindings['optionsText'](value[i]) : (typeof allBindings['optionsText'] == "string" ? value[i][allBindings['optionsText']] : optionValue);
optionValue = ko.utils.unwrapObservable(optionValue);
optionText = ko.utils.unwrapObservable(optionText);
ko.selectExtensions.writeValue(option, optionValue);
Expand Down Expand Up @@ -323,4 +323,4 @@ ko.bindingHandlers['checked'] = {
element.mergeAttributes(document.createElement("<INPUT type='radio' checked='checked' />"), false);
}
}
};
};

0 comments on commit 0f30933

Please sign in to comment.