Knockout.js 解决不一致问题剔除已检查绑定

Knockout.js 解决不一致问题剔除已检查绑定,knockout.js,Knockout.js,我正在努力摆脱淘汰赛的束缚。看这个 我的两个问题是: 如何使“选定值”成为带有复选框/无线电输入的富JS对象?对于其他输入类型和绑定,所选值可以是富类型。但是复选框/单选按钮只能是一个简单的字符串值 一般来说,我从数据库中有几个查找列表,它们是映射数组。例如,在小提琴示例中,我列出了一个国家列表: [ {countryName: "UK", countryPopulation: 650000000}, {countryName: "USA", countryPopulation: 170

我正在努力摆脱淘汰赛的束缚。看这个

我的两个问题是:

  • 如何使“选定值”成为带有复选框/无线电输入的富JS对象?对于其他输入类型和绑定,所选值可以是富类型。但是复选框/单选按钮只能是一个简单的字符串值
  • 一般来说,我从数据库中有几个查找列表,它们是映射数组。例如,在小提琴示例中,我列出了一个国家列表:

    [
      {countryName: "UK", countryPopulation: 650000000},
      {countryName: "USA", countryPopulation: 1700000000},
      {countryName: "Canada", countryPopulation: 320000000}
    ]
    
    对于几乎所有的表单输入,我都希望“selected value”是一个富JS对象。在fiddle的单选按钮示例中,我希望selectedCustomerType为:

    {label: 'Acquiring', value: 'A'}
    
    不仅仅是:

    'A'
    
  • 初始化单选按钮似乎也不起作用。我可以通过第15行的JS代码获得正确的视图:

    self.selectedCustomerType=ko.observable(self.availableCustomerTypes()[0].value)

  • (不幸的是,我必须使用self.availableCustomerTypes()[0].value初始化,而不仅仅是使用self.availableCustomerTypes()[0]。)

    但是,即使视图看起来正确,html绑定也没有显示任何内容(html的第21行)

    
    您已选择客户类型
    .
    

    但在输出中不显示selectedCustomerType。如何正确初始化selectedCustomerType?

    使用KO 3.0,您现在可以使用
    checkedValue
    绑定和
    checked绑定来具体指定值(而不是设置元素的
    value`属性并将其值用作字符串)

    因此,您现在可以执行以下操作:

    data-bind='checkedValue: $data, checked: $root.selectedCustomerType'
    
    通过该更改,您现在可以仅使用
    self.availableCustomerTypes()[0]
    对其进行初始化

    更新小提琴:


    有关其他信息,请在此处查找
    checkedValue

    对于KO 3.0,现在可以使用
    checkedValue
    绑定和
    checked绑定来具体指定值(而不是设置元素的
    value`属性并将其值用作字符串)

    因此,您现在可以执行以下操作:

    data-bind='checkedValue: $data, checked: $root.selectedCustomerType'
    
    通过该更改,您现在可以仅使用
    self.availableCustomerTypes()[0]
    对其进行初始化

    更新小提琴:


    有关其他信息,请在此处查找
    checkedValue

    对于KO 3.0,现在可以使用
    checkedValue
    绑定和
    checked绑定来具体指定值(而不是设置元素的
    value`属性并将其值用作字符串)

    因此,您现在可以执行以下操作:

    data-bind='checkedValue: $data, checked: $root.selectedCustomerType'
    
    通过该更改,您现在可以仅使用
    self.availableCustomerTypes()[0]
    对其进行初始化

    更新小提琴:


    有关其他信息,请在此处查找
    checkedValue

    对于KO 3.0,现在可以使用
    checkedValue
    绑定和
    checked绑定来具体指定值(而不是设置元素的
    value`属性并将其值用作字符串)

    因此,您现在可以执行以下操作:

    data-bind='checkedValue: $data, checked: $root.selectedCustomerType'
    
    通过该更改,您现在可以仅使用
    self.availableCustomerTypes()[0]
    对其进行初始化

    更新小提琴:


    有关更多信息,请在此处查找
    checkedValue

    谢谢。这让我达到了95%。这让我开始深入研究有点神秘的$data变量。然而,不幸的是,在您的小提琴示例中,请注意,第21行从未绑定或更新。我希望它最初设置,当所选单选按钮更改时,它将更改。为什么不起作用?再次感谢!另一件事……当您在提供的小提琴中检查实际的DOM时,查看实际的无线电标记值会设置为字符串[object object],而不是实际的对象本身。在这两种情况下,我们都希望实际值仍然设置为“A”或“N”,但选择了CustomerType作为基础对象。我更新了小提琴。您可以使用
    attr:{value:value}
    来确保
    value
    属性设置正确。对于另一个问题,您需要在
    span
    上使用
    文本
    绑定,并且需要使用
    数据绑定=
    而不是
    数据绑定:
    谢谢。这让我达到了95%。这让我开始深入研究有点神秘的$data变量。然而,不幸的是,在您的小提琴示例中,请注意,第21行从未绑定或更新。我希望它最初设置,当所选单选按钮更改时,它将更改。为什么不起作用?再次感谢!另一件事……当您在提供的小提琴中检查实际的DOM时,查看实际的无线电标记值会设置为字符串[object object],而不是实际的对象本身。在这两种情况下,我们都希望实际值仍然设置为“A”或“N”,但选择了CustomerType作为基础对象。我更新了小提琴。您可以使用
    attr:{value:value}
    来确保
    value
    属性设置正确。对于另一个问题,您需要在
    span
    上使用
    文本
    绑定,并且需要使用
    数据绑定=
    而不是
    数据绑定:
    谢谢。这让我达到了95%。这让我开始深入研究有点神秘的$data变量。然而,不幸的是,在您的小提琴示例中,请注意,第21行从未绑定或更新。我希望它最初设置,当所选单选按钮更改时,它将更改。为什么不起作用?再次感谢!另一件事……当您在提供的小提琴中检查实际的DOM时,查看实际的无线电标记值会设置为字符串[object object],而不是实际的对象本身。在这两种情况下,我们都希望实际值仍然设置为“A”或“N”,但选择了CustomerType作为基础对象。我更新了小提琴。您可以使用
    attr:{value:value}
    来确保
    value
    attr