我有一个存储在名称/值对中的数据以及相关的数据类型(文本,复选框,密码等)
我正在尝试使用knockout绑定checked属性,如此
<input type="checkbox" data-bind="checked: $root.Value">
我的问题是这些值是以字符串文字形式出现的,所以不是得到(true)的值而是得到它(“true”)..它不管“true”/“false”它会自动标记为真。
我希望能够运行一个简单的函数,测试它是否为“true”/“false”,如果是这样,则返回布尔值,因此knockout将正确绑定。
有什么建议吗?
更新:数据基本上采用以下格式
{
"ID": 276,
"Name": "DefaultIsCallToOrder",
"Value": "false",
"Sequence": 7,
"DataType": "checkbox",
},
{
"ID": 277,
"Name": "DefaultIsFeatured",
"Value": "false",
"Sequence": 8,
"DataType": "checkbox",
},
答案 0 :(得分:1)
您可以向视图模型添加计算值,请参阅jsFiddle:
<input type="checkbox" data-bind="checked: isChecked()" /> My check box <br/>
function AppViewModel(someValue) {
this.checkBoxValue = someValue;
this.isChecked = ko.computed(function() {
return this.checkBoxValue == "true";
}, this);
}
ko.applyBindings(new AppViewModel("true"));
作为替代方案,您当然可以直接与视图中的字符串值进行比较,但这会破坏视图与视图模型分离的目的:
<input type="checkbox" data-bind="checked: checkBoxValue=='true'" /> My checkbox is here
答案 1 :(得分:0)
如果我理解你的话,你可以创建一个你调用来进行比较的JavaScript函数:
<script type="text/javascript">
function isTrue(val) {
return (val === "true");
}
</script>
然后你修改你的输入看起来像这样:
<input type="checkbox" data-bind="checked: isTrue($root.Value)">
答案 2 :(得分:0)
现在使用checkedValue
绑定(在3.0版中添加)比在视图模型上创建属性更简单:
<input type="checkbox" data-bind="checked: $root.Value, checkedValue: 'true'" />
来自http://knockoutjs.com/documentation/checked-binding.html:
其他参数
- 的CheckedValue
如果您的绑定还包含checkedValue,则定义该值 由checked绑定使用而不是元素的value属性。 如果您希望该值不是a,则此选项非常有用 字符串(例如整数或对象),或者您想要设置值 动态。