【问题标题】:Knockout checked - bind to string literal淘汰赛检查 - 绑定到字符串文字
【发布时间】:2012-02-27 12:45:02
【问题描述】:

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

我正在尝试像这样使用敲除来绑定选中的属性

<input type="checkbox" data-bind="checked: $root.Value">

我的问题是这些值以字符串文字的形式出现,所以我没有得到 (true) 的值,而是像这样 ("true").. 无论 "true"/"false" 是什么,它都会自动将其标记为真实。

我希望能够运行一个简单的函数来测试它是否为“真”/“假”,如果是,则返回布尔值,以便敲除将正确绑定。

有什么建议吗?

更新:数据基本上采用以下格式

    {
      "ID": 276,
      "Name": "DefaultIsCallToOrder",
      "Value": "false",
      "Sequence": 7,
      "DataType": "checkbox",
    },
    {
      "ID": 277,
      "Name": "DefaultIsFeatured",
      "Value": "false",
      "Sequence": 8,
      "DataType": "checkbox",
    },

【问题讨论】:

  • 您能否提供有关此方法如何工作的任何链接(我的意思是表达式 data-bind="checked: $root.Value")?我会非常感谢你。

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


【解决方案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

【讨论】:

  • 我收到以下错误:“错误:无法解析绑定。消息:ReferenceError:isChecked 未定义;绑定值:检查:isChecked()”
  • @afreeland:您是否将isChecked 函数添加到您的视图模型中?检查 jsFiddle 以获取工作示例
  • 我的视图模型最初看起来像这样.. var json = $('#data').html(); var o = $.parseJSON(json);变量视图模型 = o; ko.applyBindings(viewModel);
  • @afreeland:你必须用isChecked 等扩展o,当然如果你不改变你的视图模型,这将无法工作
【解决方案2】:

如果我理解正确,您可以创建一个 JavaScript 函数,调用它来进行比较:

<script type="text/javascript">
function isTrue(val) {
   return (val === "true");
}
</script>

然后您将输入修改为如下所示:

<input type="checkbox" data-bind="checked: isTrue($root.Value)">

【讨论】:

  • 这适用于初始页面加载。它会根据值正确选中或取消选中该框。但是,它似乎没有绑定...如果我选中或取消选中某个框,则该值保持与初始页面加载值相同。
【解决方案3】:

现在有一种比在视图模型上创建属性更简单的方法,使用checkedValue 绑定(在 3.0 版中添加):

<input type="checkbox" data-bind="checked: $root.Value, checkedValue: 'true'" />

来自http://knockoutjs.com/documentation/checked-binding.html

附加参数

  • checkedValue

如果您的绑定还包括checkedValue,这将定义值 被检查绑定使用,而不是元素的 value 属性。 如果您希望该值不是 a 字符串(例如整数或对象),或者您想要设置的值 动态的。

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2013-02-04
    • 2013-12-27
    相关资源
    最近更新 更多