我正在为淘汰赛制作一个只读绑定。
如果我对每个元素应用绑定,我就可以很好地工作,如下小提琴所示:http: //jsfiddle.net/paulinfrancis/wDJ9n/
但是,我希望能够将绑定设置为视图的根元素,而不是每个表单元素:
<div data-bind="readonly: isReadonly">
<!-- My form elements here -->
</div>
ko.bindingHandlers.readonlyView = {
init: function(element, valueAccessor){
var isReadOnly = ko.unwrap(ko.unwrap(valueAccessor()));
if (isReadOnly) {
var $elements = $(':text, :radio, :checkbox, :input', $(element));
$elements.each(function(){
var domElement = this;
ko.cleanNode(domElement);
var $domElement = $(domElement);
if ($domElement.is(':text')) {
//I need the observable bound to the textbox text
} else if ($domElement.is(':radio')) {
//I need to determine if the radio btn is checked
} else if ($domElement.is(':checkbox')) {
//I need to determine if the checkbox is checked
} else if($domElement.is(':input')) {
$domElement.prop('disabled', true);
}
})
}
}
}
我不确定如何获取元素绑定到的 viewmodel 属性名称,以便我可以用我选择的只读对应项替换现有元素。
我可以使用 dataFor 或 contextFor 访问我需要的值,但我需要先知道绑定的属性名称:
ko.dataFor(domElement)['observableOne']()
ko.contextFor(domElement).$data['observableOne']()
我当然可以解析每个元素的 data-bind 属性,但这似乎很脏。还有其他更好的方法吗?