ノックアウトを使用して、配列要素を値としてデータバインドします

ぐと

配列要素を入力または選択の値としてバインドする方法はありますか?

このようなもの...

var ViewModel = function() {
  var self = this;

  self.array = ko.observableArray([undefined, undefined, undefined]);

  self.text = ko.computed(function() {
    return self.array()[0] + self.array()[1] + self.array()[2];
  });
}

var viewModel = new ViewModel();
ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<input data-bind="value: $root.array[0]" />
<input data-bind="value: $root.array[1]" />
<input data-bind="value: $root.array[2]" />
<p data-bind="text: $root.text"></p>

編集

申し訳ありませんが、質問をするのは本当にひどいですが、私の問題はもう少しトリッキーです。私の実際のエントリは、配列と選択された値のフィルターであるselectです。このような:

var ViewModel = function() {
  var self = this;
  self.family = ko.mapping.fromJS(data.family);

  self.array = ko.observableArray([ko.observable(undefined), ko.observable(undefined), ko.observable(undefined)]);

  self.filterFamily1 = function() {
    return self.family().filter(function(i) {
      return i.parent() == null;
    });

  }
  self.filterFamily2 = ko.computed(function() {
    return ko.utils.arrayFilter(self.family, function(i) {
      return i.parent() === self.array()[0]().name();
    });

  });
   self.filterFamily3 = ko.computed(function() {
    return ko.utils.arrayFilter(self.family, function(i) {
      return i.parent() === self.array()[1]().name();
    });

  })

}

var data = {
  family: [{
    name: "John",
    parent: null
  }, {
    name: "Mary",
    parent: null
  }, {
    name: "Erick",
    parent: "John"
  }, {
    name: "Paul",
    parent: "John"
  }, {
    name: "Marshall",
    parent: "Mary"
  }, {
    name: "Ross",
    parent: "Paul"
  }]
};

var viewModel = new ViewModel();
ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>

<select data-bind="options: $root.filterFamily1(),optionsText: 'name', value: $root.array()[0]"></select>
<select data-bind="options: $root.filterFamily2(),optionsText: 'name', value: $root.array()[1]"></select>
<select data-bind="options: $root.filterFamily3(),optionsText: 'name', value: $root.array()[2]"></select>

しかし、私が前に説明した問題に対する答えは正しかった。

user3297291

あなたの質問は大きく変わったので、私は新しい答えを投稿しています:

スニペットにコンソールエラーがありました。最初に選択した値が設定されておらず、未定義をチェックしていません。これらのチェックを含めると、すべてが機能します。

読みやすさを確実に改善し、繰り返し発生するコードセクションをリファクタリングできることに注意してください。

var ViewModel = function() {
  var self = this;
  self.family = ko.mapping.fromJS(data.family);




  self.filterFamily1 = ko.computed(function() {
    return self.family().filter(function(i) {
      return i.parent() === null;
    });

  });

  self.array = ko.observableArray([
    ko.observable(self.filterFamily1()[0]),
    ko.observable(undefined),
    ko.observable(undefined)
  ]);

  self.filterFamily2 = ko.computed(function() {
    return self.family().filter(function(i) {
      return self.array()[0]() && i.parent() === self.array()[0]().name();
    });

  });
  self.filterFamily3 = ko.computed(function() {
    return self.family().filter(function(i) {
      return self.array()[1]() && i.parent() === self.array()[1]().name();
    });

  })

}

var data = {
  family: [{
    name: "John",
    parent: null
  }, {
    name: "Mary",
    parent: null
  }, {
    name: "Erick",
    parent: "John"
  }, {
    name: "Paul",
    parent: "John"
  }, {
    name: "Marshall",
    parent: "Mary"
  }, {
    name: "Ross",
    parent: "Paul"
  }]
};

var viewModel = new ViewModel();
ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>

<select data-bind="options: $root.filterFamily1(),optionsText: 'name', value: $root.array()[0]"></select>
<select data-bind="options: $root.filterFamily2(),optionsText: 'name', value: $root.array()[1]"></select>
<select data-bind="options: $root.filterFamily3(),optionsText: 'name', value: $root.array()[2]"></select>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ノックアウトデータバインドforeachを使用して配列の配列を反復する方法は?

分類Dev

ノックアウト-ビューモデルデータを使用して子配列を渡します

分類Dev

ノックアウトを使用してhtml要素のテキスト値をバインドする

分類Dev

ノックアウトデータバインドを使用してdataurlする方法

分類Dev

効率的な方法でByteBufferを使用して、ヘッダーとデータレイアウトを1バイト配列にパックしますか?

分類Dev

効率的な方法でByteBufferを使用して、ヘッダーとデータレイアウトを1バイト配列にパックしますか?

分類Dev

ノックアウトデータ-cssif関数をバインドします

分類Dev

ノックアウトjs(MVVM)を使用してmvcで値summernoteエディターをバインドする方法

分類Dev

ノックアウトを使用してデータバインドで複数のイベントをバインドする方法

分類Dev

配列インデックスをループ内のカウンターとして使用して、その値を合計します

分類Dev

ノックアウトを使用してリストをビューモデルにバインドする

分類Dev

ノックアウトデータバインディングを介して入力フィールドの値を取得する

分類Dev

'with'バインディングを使用してjsコンポーネントをノックアウトすると、期待どおりに動作しません

分類Dev

各配列の最初の要素をインデックスとして設定し、残りを配列の配列のデータとして設定します

分類Dev

各配列の最初の要素をインデックスとして設定し、残りを配列の配列のデータとして設定します

分類Dev

ノックアウトバインディングコンテキストは、親をパラメーターとして渡します

分類Dev

ajax呼び出しからのデータを使用して、監視可能な配列の各要素のプロパティを更新するノックアウト

分類Dev

選択したドロップダウン要素をノードjsを使用してクライアントからサーバーに送信する方法-express

分類Dev

ノックアウトjsはjsonオブジェクトを使用して配列に値を追加します

分類Dev

ノックアウトを使用してテキスト値をhtml要素にバインドしてもブラウザに表示されない

分類Dev

ノックアウトjsを使用して異なるデータを同じdivにバインドしようとすると、重複するレコードが表示されます

分類Dev

ノードポインタの配列を使用して、ノードの子をポイントします

分類Dev

ノックアウトを使用してトグルボタンをバインドする方法

分類Dev

JavaScript配列関数を使用して、コールバック時に配列から特定の要素のインデックスと値を返す方法は?

分類Dev

オブジェクトの配列を渡すことでバニラJavaScriptを使用して、レストランメニューのアイテムを格納するドロップダウンメニューを作成しようとしています

分類Dev

ノックアウトデータバインド属性バインドが機能していませんか?

分類Dev

数値配列をループして、プレーンJavaScriptでインデックスノードのオブジェクトを構築します

分類Dev

ノックアウト-配列をループしてカウントを追跡しますか?

分類Dev

jqを使用して、特定のインデックスの配列要素にレコードを追加します

Related 関連記事

  1. 1

    ノックアウトデータバインドforeachを使用して配列の配列を反復する方法は?

  2. 2

    ノックアウト-ビューモデルデータを使用して子配列を渡します

  3. 3

    ノックアウトを使用してhtml要素のテキスト値をバインドする

  4. 4

    ノックアウトデータバインドを使用してdataurlする方法

  5. 5

    効率的な方法でByteBufferを使用して、ヘッダーとデータレイアウトを1バイト配列にパックしますか?

  6. 6

    効率的な方法でByteBufferを使用して、ヘッダーとデータレイアウトを1バイト配列にパックしますか?

  7. 7

    ノックアウトデータ-cssif関数をバインドします

  8. 8

    ノックアウトjs(MVVM)を使用してmvcで値summernoteエディターをバインドする方法

  9. 9

    ノックアウトを使用してデータバインドで複数のイベントをバインドする方法

  10. 10

    配列インデックスをループ内のカウンターとして使用して、その値を合計します

  11. 11

    ノックアウトを使用してリストをビューモデルにバインドする

  12. 12

    ノックアウトデータバインディングを介して入力フィールドの値を取得する

  13. 13

    'with'バインディングを使用してjsコンポーネントをノックアウトすると、期待どおりに動作しません

  14. 14

    各配列の最初の要素をインデックスとして設定し、残りを配列の配列のデータとして設定します

  15. 15

    各配列の最初の要素をインデックスとして設定し、残りを配列の配列のデータとして設定します

  16. 16

    ノックアウトバインディングコンテキストは、親をパラメーターとして渡します

  17. 17

    ajax呼び出しからのデータを使用して、監視可能な配列の各要素のプロパティを更新するノックアウト

  18. 18

    選択したドロップダウン要素をノードjsを使用してクライアントからサーバーに送信する方法-express

  19. 19

    ノックアウトjsはjsonオブジェクトを使用して配列に値を追加します

  20. 20

    ノックアウトを使用してテキスト値をhtml要素にバインドしてもブラウザに表示されない

  21. 21

    ノックアウトjsを使用して異なるデータを同じdivにバインドしようとすると、重複するレコードが表示されます

  22. 22

    ノードポインタの配列を使用して、ノードの子をポイントします

  23. 23

    ノックアウトを使用してトグルボタンをバインドする方法

  24. 24

    JavaScript配列関数を使用して、コールバック時に配列から特定の要素のインデックスと値を返す方法は?

  25. 25

    オブジェクトの配列を渡すことでバニラJavaScriptを使用して、レストランメニューのアイテムを格納するドロップダウンメニューを作成しようとしています

  26. 26

    ノックアウトデータバインド属性バインドが機能していませんか?

  27. 27

    数値配列をループして、プレーンJavaScriptでインデックスノードのオブジェクトを構築します

  28. 28

    ノックアウト-配列をループしてカウントを追跡しますか?

  29. 29

    jqを使用して、特定のインデックスの配列要素にレコードを追加します

ホットタグ

アーカイブ