koでデータ全部の色、指定したデータの色をcheckboxで変更

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>koでデータ全部の色、指定したデータの色をcheckboxで変更</title>
  6. <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
  7. <script type="text/javascript" src="knockout-2.1.0beta.js"></script>
  8. <script type="text/javascript">
  9.   function ViewModel() {
  10.     var self = this;
  11.     self.pCol = ko.observable(true);
  12.     self.tCol = ko.observable(true);
  13.     self.testData = ko.observable();
  14.     var aryData = new Array(
  15.       {name: "ねぎ間",         price: "168", taste: "味噌、ポン酢、芥子"},
  16.       {name: "ハツ",           price: "136", taste: "塩、味噌"},
  17.       {name: "レバー",         price: "136", taste: "塩、味噌、芥子"},
  18.       {name: "ぼんちり",       price: "136", taste: "塩、味噌、ポン酢、芥子"},
  19.       {name: "はらみ",         price: "136", taste: "塩、たれ、芥子"},
  20.       {name: "うずら玉子",     price: "136", taste: "味噌、芥子"},
  21.       {name: "なんこつ",       price: "136", taste: "塩、ポン酢"},
  22.       {name: "手羽先",         price: "168", taste: "塩、たれ、味噌、ポン酢、芥子"},
  23.       {name: "せせり",         price: "136", taste: "塩、味噌、芥子"},
  24.       {name: "白レバー",       price: "168", taste: "味噌、ポン酢"},
  25.       {name: "コニク",         price: "110", taste: ""},
  26.       {name: "丸ごとシマウマ", price: "290", taste: "塩、たれ、味噌、ポン酢、芥子"}
  27.     );
  28.     for ( var i = 0; i<aryData.length; i++ ) {
  29.       aryData[i].chkPrice = ko.observable(true); // CSS用のフラグ:金額
  30.       aryData[i].chkTaste = ko.observable(true); // CSS用のフラグ:味付け
  31.       aryData[i].pThisCol = ko.observable(true); // checkbox用:金額
  32.       aryData[i].tThisCol = ko.observable(true); // checkbox用:味付け
  33.     }
  34.     self.testData(aryData);
  35.     
  36.     // 外にある「金額の色」のチェックボックスを押したとき
  37.     self.pChgAllCss = function(data) {
  38.       for ( var i = 0; i<self.testData().length; i++ ) {
  39.         // CSSとcheckboxの変更
  40.         self.testData()[i].chkPrice(self.pCol());
  41.         self.testData()[i].pThisCol(self.pCol());
  42.       }
  43.       return true;
  44.     };
  45.     // 外にある「味付の色」のチェックボックスを押したとき
  46.     self.tChgAllCss = function(data) {
  47.       for ( var i = 0; i<self.testData().length; i++ ) {
  48.         // CSSとcheckboxの変更
  49.         self.testData()[i].chkTaste(self.tCol());
  50.         self.testData()[i].tThisCol(self.tCol());
  51.       }
  52.       return true;
  53.     };
  54.     // 中にある「金額の色」のチェックボックスを押したとき
  55.     self.pChgCss = function(data) {
  56.       data.chkPrice(data.pThisCol());
  57.       return true;
  58.     };
  59.     // 中にある「味付の色」のチェックボックスを押したとき
  60.     self.tChgCss = function(data) {
  61.       data.chkTaste(data.tThisCol());
  62.       return true;
  63.     };
  64.   }
  65.   $(document).ready(function () {
  66.     ko.applyBindings(new ViewModel());
  67.   });
  68. </script>
  69. <style type="text/css">
  70. .cssPrice{background-color:#ccffff;}
  71. .cssTaste{background-color:#ffccff;}
  72. </style>
  73. </head>
  74. <body>
  75. <h1>データ全部の色、指定したデータの色をcheckboxで変更</h1>
  76. <label><input type="checkbox" data-bind="checked: pCol, click: pChgAllCss" />金額の色</label>、
  77. <label><input type="checkbox" data-bind="checked: tCol, click: tChgAllCss" />味付の色</label><br />
  78. <div style="margin-top:0.5em;padding:0.5em;border:1px solid #333;">
  79. <table data-bind="foreach: testData()">
  80. <tr>
  81. <td data-bind="text: name"></td>
  82. <td data-bind="text: price, css: {'cssPrice': chkPrice()==true}"></td>
  83. <td data-bind="text: taste, css: {'cssTaste': chkTaste()==true}"></td>
  84. <td>
  85. <label><input type="checkbox" data-bind="checked: pThisCol, click: $root.pChgCss" />金額の色</label>
  86. <label><input type="checkbox" data-bind="checked: tThisCol, click: $root.tChgCss" />味付の色</label><br />
  87. </td>
  88. </tr>
  89. </table>
  90. </div>
  91. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  92. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  93. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  94. </div>
  95. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  96. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  97. </div>
  98. </body>
  99. </html>