ほぼ 2 日間、私は YUI JSON Utility: Adding new object members during parsing を取得しようとして立ち往生していました。
私はコーディングが初めてなので、これは非常に難しいです。さまざまな JS ファイル、参照、およびスクリプトをプロジェクトにドロップしようとした後、Configurator スクリプトを使用しました。
Explorer と Firefox でコードを実行してみました。ただし、結果の表は表示されません。
ページにエラー メッセージ "Error Getting Inventory Data" が表示されるため、コードが実行されます。これは、ページ コードの try/catch エラー メッセージです。
テキスト エディタのエラー コンソールのエラー メッセージは、データが表示されないことと関係がありますか?
テキスト エディターのエラー コンソールにエラーが表示されます (行 76、列 12) - 不明な属性: エラー コンソールのセル間隔
Mozilla Firefox エラー コンソールにも次のエラーが表示されます。
Error: ReferenceError: YUI is not defined
Source File: http://localhost:53753/currency.html
Line: 87
Firefox が識別する 87 行目のコード行は次のとおりです。
<tr><td colspan="4">Click <em>Get Data</em></td></tr>
YUI ライブラリのサンプル コードは、http: //developer.yahoo.com/yui/examples/json/json_convert_values.htmlにあります。
ここに私の完全なコードがあります:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Example: Adding New Object Members During Parsing</title>
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic">
<link rel="stylesheet" href="css/grids-min.css">
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/prettify-min.css">
<link rel="shortcut icon" type="image/png" href="images/favicon.png">
</head>
<body>
<!--
<a href="https://github.com/yui/yui3"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub"></a>
-->
<div id="doc">
<div id="hd">
<h1><img src="http://yuilibrary.com/img/yui-logo.png"></h1>
</div>
</div>
<div id="demo">
<p>Choose a currency, then get the data</p>
<select>
<option value="ARS">Argentine Peso</option>
<option value="AUD">Australian Dollar</option>
<option value="BRL">Brazilian Real</option>
<option value="GBP">British Pound</option>
<option value="CAD">Canadian Dollar</option>
<option value="CNY">Chinese Yuan</option>
<option value="COP">Colombian Peso</option>
<option value="HRK">Croatian Kuna</option>
<option value="CZK">Czech Koruna</option>
<option value="DKK">Danish Krone</option>
<option value="EEK">Estonian Kroon</option>
<option value="EUR">Euro</option>
<option value="HKD">Hong Kong Dollar</option>
<option value="HUF">Hungarian Forint</option>
<option value="ISK">Iceland Krona</option>
<option value="INR">Indian Rupee</option>
<option value="JPY">Japanese Yen</option>
<option value="KRW">Korean Won</option>
<option value="LVL">Latvian Lat</option>
<option value="LTL">Lithuanian Lita</option>
<option value="MYR">Malaysian Ringgit</option>
<option value="MXN">Mexican Peso</option>
<option value="NZD">New Zealand Dollar</option>
<option value="NOK">Norwegian Krone</option>
<option value="PHP">Philippine Peso</option>
<option value="PLN">Polish Zloty</option>
<option value="RUB">Russian Rouble</option>
<option value="SGD">Singapore Dollar</option>
<option value="SKK">Slovak Koruna</option>
<option value="ZAR">South African Rand</option>
<option value="LKR">Sri Lanka Rupee</option>
<option value="SEK">Swedish Krona</option>
<option value="TRY">Turkey Lira</option>
<option value="USD" selected="selected">U.S. Dollar</option>
<option value="CHF">Swiss Franc</option>
<option value="TWD">Taiwan Dollar</option>
<option value="THB">Thai Baht</option>
</select>
<input type="button" id="demo_go" value="Get Data">
<table cellspacing="0">
<caption>Inventory</caption>
<thead>
<tr>
<th>SKU</th>
<th>Item</th>
<th>Price (USD)</th>
<th>Price (<span>USD</span>)</th>
</tr>
</thead>
<tbody>
<tr><td colspan="4">Click <em>Get Data</em></td></tr>
</tbody>
</table>
</div>
<!-- JS -->
<script type="text/javascript" src="http://yui.yahooapis.com/combo?3.8.1/build/yui-base/yui-base-min.js&3.8.1/build/json-parse/json-parse-min.js&3.8.1/build/json-stringify/json-stringify-min.js"></script>
<script>
YUI().use("node", "io", "json-parse",function (Y) {
// Safari 4.0.3's native JSON does not support adding members during parse,
// so use JavaScript implementation for consistency
Y.JSON.useNativeParse = false;
var example = {
rates : {"USD":1,"EUR":0.6661,"GBP":0.5207,"AUD":1.1225,"BRL":1.609,"NZD":1.4198,"CAD":1.0667,"CHF":1.0792,"CNY":6.8587 ,"DKK":4.9702,"HKD":7.8064,"INR":42.0168,"JPY":109.8901,"KRW":1000,"LKR":107.5269,"MXN":10.1317,"MYR" :3.3167,"NOK":5.3277,"SEK":6.2617,"SGD":1.4073,"THB":33.7838,"TWD":31.1526,"VEF":2.1445,"ZAR":7.6923 ,"BGN":1.3028,"CZK":16.0514,"EEK":10.4275,"HUF":158.7302,"LTL":2.2999,"LVL":0.4692,"PLN":2.1758,"RON" :2.3804,"SKK":20.2429,"ISK":4.8008,"HRK":81.3008,"RUB":24.3309,"TRY":1.1811,"PHP":44.2478,"COP":2000 ,"ARS":3.1289},
currency : 'USD',
convert : function (k,v) {
// 'this' will refer to the object containing the key:value pair,
// so this step will add a new object member while leaving the original
// intact (but formatted to two decimal places). If the original
// is not needed, just return the converted value.
if (k === 'Price') {
var x = Math.round(v * example.rates[example.currency] * 100) / 100;
this.convertedPrice = x.toFixed(2); // added to item
return v.toFixed(2); // assigned to item.Price
}
return v;
},
updateTable : function (inventory) {
// Update the column header
Y.one('#demo table th span').set('innerHTML',example.currency);
var tbody = Y.one('#demo table tbody'),
html = ['<table><tbody>'],
rowTemplate = '<tr><td>{SKU}</td><td>{Item}</td><td>{Price}</td><td>{convertedPrice}</td></tr>',
i, len;
if (inventory) {
for (i = 0, len = inventory.length; i < len; ++i) {
html.push(Y.Lang.sub(rowTemplate, inventory[i]));
}
} else {
html.push('<tr><td colspan="4">No Inventory data</td></tr>');
}
html.push('</tbody></table>');
tbody.replace(Y.Node.create(html.join('')).one('tbody'));
}
};
Y.one('#demo_go').on('click', function (e) {
// Disable the button temporarily
this.set('disabled',true);
// Store the requested currency
var sel = Y.one("#demo select");
example.currency = sel.get("options").item(sel.get("selectedIndex")).get("value");
Y.io('js/json-convert-values-response.json',{
timeout : 3000,
on : {
success : function (xid, res) {
var inventory;
try {
inventory = Y.JSON.parse(res.responseText,example.convert);
example.updateTable(inventory);
}
catch(e) {
alert("Error getting inventory data");
}
finally {
Y.one('#demo_go').set('disabled',false);
}
},
failure : function () {
alert("Error getting inventory data");
}
}
});
});
// Expose example objects for inspection
YUI.example = example;
});
</script>
</body>
</html>
更新 - これらの JSON の例は、XHR を使用して JSON データを取得しているため、jsfiddle では機能しないようです。そのデータはサーバーに存在しないため、ファイルされます。フィドルは無視してください
ここに私の問題の JS Fiddle があります。誰かがこれを機能させるのを手伝ってくれますか?
解析中の新しいオブジェクト メンバーの追加: http://jsfiddle.net/DanyB/3ntvw/
見てくれた親切な人に感謝します。