0

これはすでに回答されている可能性が非常に高く、適切な検索用語を使用していないため、気分が悪くなります。私は非同期 JavaScript を初めて使用します。ということで、お詫びを申し上げて参ります。誰かが私が正しい検索用語を取得するのを手伝ってくれるなら、私はそれを最も感謝します.

Google フィード API を使用しようとしています。こんにちは世界のセクションで説明されているように、在庫の例に従うと機能します。いくつかの場所で使用できるように、もう少し拡張可能なものを作ろうとしています。だから私はオブジェクトを作成しました...

function AlertRSS(num, url, div, date) {
  this.num = typeof num !== 'undefined' ? num : 5;
  this.url = typeof url !== 'undefined' ? url : 'http://arstechnica.com/author/caseyjohnston/feed/';
  this.sel = typeof sel !== 'undefined' ? sel : '#alert';
  this.date = typeof date !== 'undefined' ? date : this.getYesterday();
}

次に、メソッド内でオブジェクトを呼び出そうとします...

AlertRSS.prototype.displayFeed = function() {
  var retval = null;
  var feed = new google.feeds.Feed(this.url);
  feed.load(function(result) {
  var tmp = this;
    if (!result.error) {
      for ( var i = 0; i < result.feed.entries.length; i++) {
        var entry = result.feed.entries[i];
        console.log(sel + ' <h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br  />');
        $(tmp.sel).append('<h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br  />');
      }
    }
  });
};

ただし、オブジェクトからプロパティにアクセスできないようです。Uncaught ReferenceError: sel is not definedコンソールにが表示され続けます。

この問題は範囲に関連していると思いますが、この時点で少し深みがないように感じます。どんな助けでも大歓迎です。

アップデート

最初の投稿としては、これは冗談でした。私のコードには多くの間違いがありました。どちらの回答も正解でした。ただし、私のような別の貧弱な初心者がこの質問を見た場合に備えて、動作するコードを公開したいと思いました。

問題はラインの配置であることが判明しましたvar tmp = this;。動作させるには、内部コールバック関数の外に配置する必要があります。Tomasz Nurkiewicz の提案に従って、私も に変更var tmpしましたvar that。作業コードは次のとおりです。

function AlertRSS(num, url, sel, date) {
  this.num = typeof num !== 'undefined' ? num : 5;
  this.url = typeof url !== 'undefined' ? url : 'http://arstechnica.com/author/caseyjohnston/feed/';
  this.sel = typeof sel !== 'undefined' ? sel : '#alert';
  this.date = typeof date !== 'undefined' ? date : this.getYesterday();
}

AlertRSS.prototype.displayFeed = function() {
  var feed = new google.feeds.Feed(this.url);
  var that = this;
  feed.load(function(result) {
    if (!result.error) {
      for ( var i = 0; i < result.feed.entries.length; i++) {
        var entry = result.feed.entries[i];
        console.log(that.sel + ' <h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br  />');
        $(that.sel).append('<h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br  />');
      }
    }
  });
};
4

2 に答える 2

1

tmpキャプチャする変数を正しく作成しています (通常、このコンテキストthisで呼び出されることに注意してください)。thatここでこの参照を正しく使用しています: tmp.sel. ただし、その前にインラインで使用するのを忘れていました:

console.log(sel + ' <h2><a href="' + entry.link + '">' + entry.title + '</a></h2><br  />');

への変更:

console.log(tmp.sel + //...

あなたは大丈夫です。

于 2012-06-19T21:20:51.083 に答える
1

関数のパラメーターは、sel ではなく div を要求します。

于 2012-06-19T21:22:00.913 に答える