当foreach在一个对象数组上时,Knockout不会从对象数组属性生成一个下拉列表

时间:2012-06-22 13:54:34

标签: javascript arrays knockout.js

我有一个生成属性对象数组的表单。属性对象具有数组属性,该属性是属性值的数组。该表单允许您添加属性名称和属性值数组以及映射到属性对象:

function Attribute(data) {
      var self = this;
      self.Name = ko.observable([data.attributeName]);
      self.Values = ko.observable([data.attributeValues]);
  }

Values数组是AttributeValues的一个属性:

  function AttributeValue(data) {
      this.Value = data.value;
  };

ViewModel在创建时具有 AttributeValues 数组,并将其名称传递给其属性的本地数组

   function newProductViewModel() {
      var self = this;
      self.attributeName = ko.observable();
      self.attributes = ko.observableArray([]);
      self.attributeValues = ko.observableArray([]);

当您在表单中创建属性时,敲除列出已添加到AttributeValues数组的属性值没有问题:

   <select multiple="multiple" height="5" data-bind="options: attributeValues, optionsText: 'Value', selectedOptions: selectedItems, optionsCaption: 'Added Values...'">

其中 attributeValues 是ViewModel的attributeValues数组。

一旦添加了属性名称和属性值列表,并添加了属性,我就会覆盖ViewModel上的observableArray 属性属性,以显示添加的属性列表创造它们。

问题

问题是我为每个属性的属性值显示了一个下拉列表(选择):

<ul data-bind="foreach: attributes">
   <li>
    <div>
       <span data-bind="text: Name"></span>
       <select multiple="multiple" height="5" data-bind="options: Values, optionsText: 'Value', selectedOptions: selectedItems, optionsCaption: 'Added Values...'">

     .....remove for sake of brevity

但它不会列出每个属性的值数组中每个 AttributeValue

我已经介入,可以看到使用正确的值设置了Values属性。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我弄明白了这个问题。我将一个数组“attributeValues”传递给Attribute对象并将其放入数组

self.Values = ko.observable([data.attributeValues]);

所以我假设它将是一个带有该索引中的attributeValues数组的元素的数组。单步执行时,我看到了正确的元素数,因为我只添加了一个值,但实际上是在第一个索引中查看数组。