解决不一致的问题敲门检查绑定

时间:2013-12-06 03:02:36

标签: knockout.js

我在没有敲击检查绑定的情况下挣扎。请参阅此fiddle example

我的两个问题是:

  1. 如何让'selected value'成为带有复选框/无线电输入的丰富JS​​对象?对于其他输入类型和绑定,所选值可以是富类型。但是复选框/单选按钮只能是一个简单的字符串值。
  2. 一般来说,我有几个来自数据库的查找列表,它们是地图数组。例如,在小提琴示例中,我有一个国家列表:

    [
      {countryName: "UK", countryPopulation: 650000000},
      {countryName: "USA", countryPopulation: 1700000000},
      {countryName: "Canada", countryPopulation: 320000000}
    ]
    

    对于我所拥有的几乎所有表单输入,我都希望“选定值”成为丰富的JS对象。在小提琴的单选按钮示例中,我希望selectedCustomerType为:

    {label: 'Acquiring', value: 'A'}
    

    而不只是:

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

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

    2. (很遗憾,我必须使用self.availableCustomerTypes()[0] .value初始化,而不是仅仅使用self.availableCustomerTypes()[0]。)

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

      <div>
        You have chosen customer type
        <span data-bind:"value: selectedCustomerType()"></span>.
      </div>
      

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

1 个答案:

答案 0 :(得分:3)

使用KO 3.0,您现在可以使用checkedValue绑定以及元素的checked binding to specify specifically what the value will be (rather than setting the value`属性并将其值用作字符串。)

所以,你现在可以做到:

data-bind='checkedValue: $data, checked: $root.selectedCustomerType'

通过此更改,您现在可以使用self.availableCustomerTypes()[0]初始化它。

更新了小提琴:http://jsfiddle.net/rniemeyer/8GJpF/

有关其他信息,请在此处查找checkedValuehttp://knockoutjs.com/documentation/checked-binding.html