0

スクリプトはデータを正常に取得していますが、underscore.js を使用して表示する「行」の結果を取得できません。特定の障害点は「var = resultContentTemplate」です。これを理解することはできません。

$(document).ready(function(){
var symbols = symbols || ['GOOG','A','AA','AAN'];
var yqlUrl = "http://query.yahooapis.com/v1/public/yql";
var historicalUrl = 'http://finance.yahoo.com/d/quotes.csv';

var queryTemplate = _.template("select * from csv where url='" + historicalUrl + "?s=<%= symbol %>&f=n0s0l1' and columns='name,symbol,LastTradePriceOnly'");

var resultPlaceholderTemplate = _.template(
  '<li id="<%= id %>">Please wait, Loading quotes...</li>');


var resultContentTemplate = _.template(
  '<ul>'
  + '<li><% _.each(results, function(row) { %>'
  + '<%=row.name %>'
  + '<%=row.symbol %>'
  + '<%=row.LastTradePriceOnly %>'
  + '<% }); %>'
  + '</li>'
  + '</ul>');

// display the results of the query, replacing the 'loading' placeholder
function displayResult(id, queryResult, symbol) {
  var resultsAsHtml = resultContentTemplate({results: queryResult.row, symbol: symbol});
  $('#' + id).html(resultsAsHtml);
}

_.each(symbols, function(symbol) {

    var resultId = _.uniqueId();

    // lay down a placeholder
    $('#resultContainer').append(resultPlaceholderTemplate({id:resultId, symbol:symbol}));

    $.ajax({
      url: yqlUrl,
      data: {q: queryTemplate({symbol:symbol}), format: 'json'},
      context: $('#resultContainer')
    }).done(function(output) {
      console.log(output);
      var response = _.isString(output) ? JSON.parse(output) : output;
      displayResult(resultId, response.query.results, symbol);
    }).fail(function(err) {
      console.log('the thing failed with an error');
      console.log(err.responseText);
    });

});

});
4

1 に答える 1

1

http://jsfiddle.net/mpBMK/を参照してください

あなたのコードは、シンボルごとに 1 つの ajax リクエストを作成しています。したがって、displayResult はシンボルごとに呼び出され、queryResult パラメーターには、そのシンボルの行である子が 1 つだけ含まれます。

resultContentTemplate はすでに単一の行を取得しているため、結果を反復処理しないでください。その代わり:

var resultContentTemplate = _.template(
'<ul><li><%=result.name %><%=result.symbol %><%=result.LastTradePriceOnly %></li></ul>');

...
//in displayResult(...) which is called once per symbol
var resultsAsHtml = resultContentTemplate({result: queryResult.row, symbol: symbol});

問題が何であり、どのように修正できるかは、フィドルによって明確になるはずです。

于 2013-01-29T04:36:44.003 に答える