【问题标题】:Knockout will not generate a dropdown from an objects array property when foreach over an array of objects当对对象数组进行 foreach 时,Knockout 不会从对象数组属性生成下拉列表
【发布时间】:2012-06-24 20:01:11
【问题描述】:

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

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 数组,并将其与 Attribute 名称一起传递给其本地 Attributes

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

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

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

其中 attributeValues 是 ViewModel 的属性值数组。

添加属性名称和属性值列表并添加属性后,我会遍历 ViewModel 上的 observableArray attributes 属性,以显示添加的属性列表创建它们。

问题

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

<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

但它不会列出每个 Attribute

的 Values 数组中每个 AttributeValue 的 Value

我已逐步完成,可以看到 Values 属性确实设置了正确的值。

我做错了什么?

【问题讨论】:

    标签: javascript arrays knockout.js


    【解决方案1】:

    我发现了问题所在。我将数组“attributeValues”传递给 Attribute 对象并将其放入数组中

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

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

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多