選択を処理する新しいバインディングを作成できます。
ko.bindingHandlers.selected = {
update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var selected = ko.utils.unwrapObservable(valueAccessor());
if (selected) element.select();
}
};
このバインディングを入力フィールドに追加します。
<input data-bind="visible: editing, value: name, hasfocus: editing, selected: editing" />
ここにフィドルがあります:http://jsfiddle.net/RnCUd/2/
または、バインディングをラップするカスタム バインディングを作成することもできますhasfocus
。
ko.bindingHandlers.hasSelectedFocus = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
ko.bindingHandlers['hasfocus'].init(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
},
update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
ko.bindingHandlers['hasfocus'].update(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
var selected = ko.utils.unwrapObservable(valueAccessor());
if (selected) element.select();
}
};
このバインディングは単に初期化と更新を委譲しhasfocus
、オブザーバブルが true の場合は要素の選択を処理します。の代わりに使用してくださいhasfocus
。
<input data-bind="visible: editing, value: name, hasSelectedFocus: editing" />
ここにフィドルがあります:http://jsfiddle.net/RnCUd/1/