knockout.jsでDOMから値を取得
- <!DOCTYPE html>
- <html lang="ja">
- <head>
- <meta charset="UTF-8">
- <title>knockout.jsでDOMから値を取得</title>
- <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
- <script type="text/javascript" src="knockout-2.1.0beta.js"></script>
- <style type="text/css">
- td, th{
- border:1px solid #ccc;
- }
- </style>
- <script type="text/javascript">
- $(document).ready(function () {
- ko.applyBindings(new ViewModel());
- });
- function ViewModel() {
- var self = this;
- self.jsonTemporary = {};
- self.jsonData = ko.observable();
- self.tempTaste = ko.observable();
- this.viewTaste = ko.computed( function()
- {
- return self.tempTaste();
- }, this);
- // 表示
- self.GotoView = function(json) {
- this.jsonData(json);
- };
- // 登録
- self.entryTaste = function(data, event) {
- htmlDom = event.target;
- this.taste = $(htmlDom).parents("tr").find(".span")[0].innerText;
- self.tempTaste(this.taste);
- };
- // 削除
- self.deleteTaste = function(data, event) {
- htmlDom = event.target;
- this.taste = "";
- self.tempTaste(this.taste);
- };
- // デフォルトでの表示:元データを読込んでおく
- $.getJSON("./testdata/testdataA.txt", {}, function(json){
- json["taste"] = "";
-
- self.jsonTemporary = json; // 何回も読込みされるのがイヤなので保管しておく
- self.GotoView(self.jsonTemporary);
- });
- }
- </script>
- </head>
- <body>
- <h1>knockout.jsでDOMから値を取得</h1>
- <div>
- <table data-bind="visible: jsonData()">
- <thead><tr><th>品名</th><th>金額</th><th>味</th><th>ボタン</th></thead>
- <tbody data-bind="with: jsonData">
- <tr>
- <td data-bind="text: name"></td>
- <td data-bind="text: price"></td>
- <td data-bind="text: $root.viewTaste"></td>
- <td>
- <span class="span">味噌</span>
- <button data-bind="click: $root.entryTaste">確定</button>
- <button data-bind="click: $root.deleteTaste">削除</button>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
- <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
- <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
- </div>
- <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
- Copyright © 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
- </div>
- </body>
- </html>