ko内でのインスタンス(ビューモデルオブジェクトのインスタンス化?)

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>ko内でのインスタンス(ビューモデルオブジェクトのインスタンス化?)</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.   /* ==============================================================
  10.    ▼ko内で使うクラス
  11.   ============================================================== */
  12.   var koClassCalendar = function()
  13.   {
  14.     var self = this;
  15.     self.Iptdata    = ko.observable("");
  16.     self.Arydata    = ko.observableArray();
  17.     self.AryAssdata = ko.observableArray();
  18.     self.viewIptdata = function() {
  19.       alert(self.Iptdata());
  20.     }
  21.     
  22.     self.viewOne = function(a) {
  23.       alert(a.name + "(" + a.price + "円)");
  24.     }
  25.     
  26.     self.viewTwo = function(a, b) {
  27.       var name  = self.AryAssdata()[b()].name;
  28.       var price = self.AryAssdata()[b()].price;
  29.       alert(name + "・" + a + "(" + price + "円)");
  30.     }
  31.     
  32.   }
  33.   
  34.   /* ==============================================================
  35.    ▲ko内で使うクラス
  36.   ============================================================== */
  37.   
  38.   // knockout.js ===============================================
  39.   function ViewModel() {
  40.     var self = this;
  41.     self.test01 = new koClassCalendar();
  42.     self.test02 = new koClassCalendar();
  43.     
  44.     ary01 = ([
  45.       {"name": "ねぎ間",        "price": "168", "taste": "味噌、ポン酢、芥子"           },
  46.       {"name": "ハツ",          "price": "136", "taste": "塩、味噌"                     },
  47.       {"name": "レバー",        "price": "136", "taste": "塩、味噌、芥子"               },
  48.       {"name": "ぼんちり",      "price": "136", "taste": "塩、味噌、ポン酢、芥子"       },
  49.       {"name": "はらみ",        "price": "136", "taste": "塩、たれ、芥子"               },
  50.       {"name": "うずら玉子",    "price": "136", "taste": "味噌、芥子"                   }
  51.     ]);
  52.     ary02 = ([
  53.       {"name": "なんこつ",      "price": "136", "taste": "塩、ポン酢"                   },
  54.       {"name": "手羽先",        "price": "168", "taste": "塩、たれ、味噌、ポン酢、芥子" },
  55.       {"name": "せせり",        "price": "136", "taste": "塩、味噌、芥子"               },
  56.       {"name": "白レバー",      "price": "168", "taste": "味噌、ポン酢"                 },
  57.       {"name": "コニク",        "price": "110", "taste": ""                             },
  58.       {"name": "丸ごとシマウマ","price": "290", "taste": "塩、たれ、味噌、ポン酢、芥子" }
  59.     ]);
  60.     ary11 = ([
  61.       {"name" : "ねぎ間",
  62.        "price": "151",
  63.        "taste": new Array("味噌", "ポン酢", "芥子")},
  64.       {"name" : "ハツ",
  65.        "price": "122",
  66.        "taste": new Array("塩", "味噌")},
  67.       {"name" : "レバー",
  68.        "price": "122",
  69.        "taste": new Array("塩", "味噌", "芥子")},
  70.       {"name" : "ぼんちり",
  71.        "price": "122",
  72.         "taste": new Array("塩", "味噌", "ポン酢", "芥子")},
  73.       {"name" : "はらみ",
  74.        "price": "122",
  75.         "taste": new Array("塩", "たれ", "芥子")}
  76.     ]);
  77.     ary12 = ([
  78.       {"name" : "うずら玉子",
  79.        "price": "122",
  80.         "taste": new Array("味噌", "芥子")},
  81.       {"name" : "なんこつ",
  82.        "price": "122",
  83.         "taste": new Array("塩", "ポン酢")},
  84.       {"name" : "手羽先",
  85.        "price": "151",
  86.        "taste": new Array("塩", "たれ", "味噌", "ポン酢", "芥子")},
  87.       {"name" : "せせり",
  88.        "price": "122",
  89.         "taste": new Array("塩", "味噌", "芥子")},
  90.       {"name" : "白レバー",
  91.        "price": "151",
  92.        "taste": new Array("味噌", "ポン酢")},
  93.       {"name" : "コニク",
  94.        "price": "100",
  95.        "taste": new Array("")},
  96.       {"name" : "丸ごとシマウマ",
  97.        "price": "261",
  98.         "taste": new Array("塩", "たれ", "味噌", "ポン酢", "芥子")}
  99.     ]);
  100.     self.test01.Iptdata("あはは");
  101.     self.test02.Iptdata("うふふ");
  102.     self.test01.Arydata(ary01);
  103.     self.test02.Arydata(ary02);
  104.     self.test01.AryAssdata(ary11);
  105.     self.test02.AryAssdata(ary12);
  106.   }
  107.   $(document).ready(function () {
  108.     ko.applyBindings(new ViewModel());
  109.   });
  110. </script>
  111. <style type="text/css">
  112. .box{
  113.   margin-top:1em;
  114.   padding:5px;
  115.   border:1px solid #ccc;
  116. }
  117. td{font-size:12px;border:1px solid #ccc;}
  118. .cssClick{
  119.   cursor: pointer;
  120. }
  121. .cssClick:hover{
  122.   color:red;
  123. }
  124. </style>
  125. </head>
  126. <body>
  127. <h1>ko内でのインスタンス(ビューモデルオブジェクトのインスタンス化?)</h1>
  128. <div>
  129.   <div data-bind="with: test01" class="box">
  130.   <!-- ko template: {name: 'testTemplate'}  --><!-- /ko -->
  131.   </div>
  132.   <div data-bind="with: test02" class="box">
  133.   <!-- ko template: {name: 'testTemplate'}  --><!-- /ko -->
  134.   </div>
  135. </div>
  136. <script type="text/html" id="testTemplate">
  137.   <input type="text" data-bind="value: Iptdata" />
  138.   <button data-bind="click: viewIptdata">←をアラート出力するボタン</button><br />
  139.   <br />
  140.   クリックした行の値をアラート表示するだけ
  141.   <table data-bind="foreach: Arydata">
  142.   <tr data-bind="click: $parent.viewOne, css: {'cssClick': true}">
  143.     <td data-bind="text: $index"></td>
  144.     <td data-bind="text: name"></td>
  145.     <td data-bind="text: price"></td>
  146.     <td data-bind="text: taste"></td>
  147.   </tr>
  148.   </table>
  149.   <br />
  150.   クリックした味の値をアラート表示するだけ
  151.   <table data-bind="foreach: AryAssdata">
  152.   <tr>
  153.     <td data-bind="text: $index"></td>
  154.     <td data-bind="text: name"></td>
  155.     <td data-bind="text: price"></td>
  156.     <td data-bind="foreach: taste">
  157.       [<span data-bind="text: $data, css: {'cssClick': true}, click: function(){$parents[1].viewTwo($data, $parentContext.$index)}"></span>] 
  158.     </td>
  159.   </tr>
  160.   </table>
  161. </script>
  162. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  163. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  164. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  165. </div>
  166. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  167. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  168. </div>
  169. </body>
  170. </html>