knockoutjsちゅーとりある:データをテーブルにforeachで出力して、ボタンクリックで追加

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>knockoutjsちゅーとりある:データをテーブルにforeachで出力して、ボタンクリックで追加</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 () {
  10.     function SeatReservation(name, initialMeal) {
  11.       var self = this;
  12.       self.name = name;
  13.       self.meal = ko.observable(initialMeal);
  14.     }
  15.     function ReservationsViewModel() {
  16.       var self = this;
  17.       self.availableMeals = [
  18.         { mealName: "Standard (sandwich)",    price: 0 },
  19.         { mealName: "Premium (lobster)",      price: 34.95 },
  20.         { mealName: "Ultimate (whole zebra)", price: 290 }
  21.       ];
  22.       self.seats = ko.observableArray([
  23.         new SeatReservation("Steve", self.availableMeals[0]),
  24.         new SeatReservation("Bert",  self.availableMeals[1])
  25.       ]);
  26.       self.addSeat = function() {
  27.         self.seats.push(new SeatReservation("", self.availableMeals[2]));
  28.       }
  29.     }
  30.     ko.applyBindings(new ReservationsViewModel());
  31.   })();
  32. </script>
  33. </head>
  34. <body>
  35. <table>
  36. <thead><tr>
  37.   <th>Passenger name</th><th>Meal</th><th>Surcharge</th>
  38. </tr></thead>
  39. <tbody data-bind="foreach: seats">
  40. <tr>
  41.   <td data-bind="text: name"></td>
  42.   <td data-bind="text: meal().mealName"></td>
  43.   <td data-bind="text: meal().price"></td>
  44. </tr>
  45. </tbody>
  46. </table>
  47. <button data-bind="click: addSeat">Reserve another seat</button>
  48. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  49. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  50. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  51. </div>
  52. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  53. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  54. </div>
  55. </body>
  56. </html>