我正在尝试使用Knockout构建一些HTML,Jquery UI可以转换为toggle buttons。我需要得到的是:
<div id="status">
<input type="radio" id="status_ACTIVE" value="ACTIVE" name="status" /><label for="status_ACTIVE">Active</label>
<input type="radio" id="status_INACTIVE" value="INACTIVE" name="status" checked="checked" /><label for="status_INACTIVE">Inactive</label>
</div>
使用JQuery UI我可以轻松将其转换为切换按钮。但是,如何在不使用现已折旧的JQuery模板的情况下生成它?这就是我试图做的事情:
在javascript模型中:
self.statuses = [{Selected:true,Text:"Active",Value:"ACTIVE"},{Selected:false,Text:"Inactive",Value:"INACTIVE"}];
标记:
<div id="status" data-bind="foreach: statuses">
<input type="radio" name="status" data-bind="value: Value, id: 'status_' + Value" /><label data-bind="text: Text, for: 'status_' + Value"></label>
</div>
这不起作用。我不认为它喜欢我如何创建该ID,或将其与循环中的for关联。它不正确地绘制按钮,因为两个独立的按钮和点击功能不起作用。
即使我只是将值指定为id:id: Value
和for: Value
,它仍然不起作用。我可以不使用knockout设置这些属性吗?
答案 0 :(得分:10)
添加此javascript解决了我的问题:
ko.bindingHandlers.id = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
$(element).attr('id', valueAccessor());
}
};
ko.bindingHandlers.forattr = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
$(element).attr('for', valueAccessor());
}
};
我必须将for: 'status_' + Value
更改为foratt: 'status_' + Value
,因为for
是保留字。
<强>更新强> 我也可以使用&#34; attr&#34;绑定,像这样:
attr: { for: 'status_' + Value }