剔除检查 - 绑定到字符串文字

发布于 2025-01-02 21:23:34 字数 673 浏览 0 评论 0原文

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

我尝试使用淘汰赛来绑定选中的属性,如下所示

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

我的问题是值作为字符串文字输入,所以我不是获取 (true) 的值,而是像这样 ("true") 得到它。无论 "true"/"false" 它会自动将其标记为 true。

我希望能够运行一个简单的函数来测试它是否为“true”/“false”,如果是,则返回布尔值,这样淘汰赛将正确绑定。

有什么建议吗?

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

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

I have a data stored in Name/Value pairs with an associated data type (text, checkbox, password, etc.,)

I am trying to use knockout to bind the checked attribute like so

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

My problem is that the values come in as string literals, so instead of getting the value of (true) I get it like this ("true")..which regardless of "true"/"false" it will automatically mark it as true.

I would like to be able to run a simple function that test if it is "true"/"false" and if so return the boolean value back, so knockout will bind properly.

any suggestions?

UPDATE: Data is essentially in the following format

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

孤星 2025-01-09 21:23:34

您可以向视图模型添加计算值,请参阅 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

You can add a computed value to your view model, see 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"));

As an alternative you can of course compare directly with the string value in your view, that would defeat the purpose of separation of view from view model though:

<input type="checkbox" data-bind="checked: checkBoxValue=='true'" /> My checkbox is here
紧拥背影 2025-01-09 21:23:34

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

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

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

附加参数

  • 检查值

如果您的绑定还包含checkedValue,则这定义了值
由已检查的绑定使用,而不是元素的 value 属性。
如果您希望该值不是 a 以外的值,这很有用
字符串(例如整数或对象),或者您想要设置的值
动态地。

There's now a simpler way than creating a property on your view model, using the checkedValue binding (added in version 3.0):

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

From http://knockoutjs.com/documentation/checked-binding.html :

Additional parameters

  • checkedValue

If your binding also includes checkedValue, this defines the value
used by the checked binding instead of the element’s value attribute.
This is useful if you want the value to be something other than a
string (such as an integer or object), or you want the value set
dynamically.

猫弦 2025-01-09 21:23:34

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

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

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

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

If I understand you right, you can just create a JavaScript-function that you call to do the comparison:

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

And then you modify your input to look like this:

<input type="checkbox" data-bind="checked: isTrue($root.Value)">
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文