Knockout选中 - 绑定到字符串文字

时间:2012-02-05 21:53:17

标签: jquery asp.net-mvc-3 knockout.js

我有一个存储在名称/值对中的数据以及相关的数据类型(文本,复选框,密码等)

我正在尝试使用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",
    },

3 个答案:

答案 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,则此选项非常有用   字符串(例如整数或对象),或者您想要设置值   动态。