0

属性オブジェクトの配列を生成するフォームがあります。属性オブジェクトには、属性値の配列である配列プロパティがあります。フォームを使用すると、属性名と属性値の配列を追加して、属性オブジェクトにマップできます。

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;
  };

作成時にAttributeValuesの配列を持つ ViewModel を使用して、属性の名前とともにそれを属性のローカル配列に渡します。

   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属性プロパティを foreach して、作成した追加された属性のリストを表示します。

問題

問題は、各属性の属性 Values 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

ただし、各属性の Values 配列内の各AttributeValueのはリストされません。

ステップスルーしたところ、Values プロパティに適切な値が設定されていることがわかります。

私は何を間違っていますか?

4

1 に答える 1

0

私は問題を理解しました。配列「attributeValues」をAttributeオブジェクトに渡し、それを配列に入れていました

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

したがって、そのインデックスにattributeValuesの配列を持つ1つの要素の配列になると思います。ステップスルーすると、値を1つしか追加していないため、正しい数の要素が表示されましたが、実際には最初のインデックス内の配列を見ています。

于 2012-06-22T14:25:54.417 に答える