0

私はバックボーンが初めてで、自分のビューでスコープを維持する方法を理解しようとしています。JavaScript では通常、オブジェクトを一種のクラスとして設定し、self = this を使用してクラス全体のスコープを維持します。私はバックボーンで同じことをしようとしています。私はこの種の設定をしています:

var app = app || {};

app.TwitterView = Backbone.View.extend({

  el: '#twitter-container',
  tweets: [],
  initialize: function( templateContent ) {
    this.render(templateContent);
  },
  render: function(templateContent) {
    this.$el.html(this.template(templateContent));
    this.loadTweets();
    return this;
  },
  loadTweets: function(){
      console.log('load tweets');
      this.tweets = [];
      clearInterval(this.tweetCheckInterval,this.tweetCycleInterval);

      $.ajax({
        url: "scripts/php/mixitup.php",
        type: "GET",
        dataType: 'json',
        cache: false,
        success: function (data) {
          console.log(data);
          for (var i=0; i<data.statuses.length;i++){
            var tweet = {};
            tweet.status = data.statuses[i].text;
            tweet.user = data.statuses[i].user.screen_name;
            app.TwitterView.tweets.push(tweet);

最後の行で、各ツイートをプッシュできるようにツイート配列への参照を維持しようとしていることがわかりますが、配列ツイートが見つかりません。この範囲を維持するにはどうすればよいですか?

4

3 に答える 3

1

私はこれを理解しました-jquery ajaxを使用すると、コンテキストを使用できます。これをオブジェクトパラメーターとして使用できるため、内部で引き続きthis.tweetsを参照できます

于 2013-11-04T14:16:51.520 に答える
0

.bind()スコープを維持するためにも使用できます。

  $.ajax({
    url: "scripts/php/mixitup.php",
    type: "GET",
    dataType: 'json',
    cache: false,
    success: function (data) {
      console.log(data);
      for (var i=0; i<data.statuses.length;i++){
        var tweet = {};
        tweet.status = data.statuses[i].text;
        tweet.user = data.statuses[i].user.screen_name;
        this.tweets.push(tweet);
      }
    }.bind(this)

それなら必要ないvar self = this;...

于 2013-11-04T12:30:19.553 に答える
0

app.TwitterViewインスタンスを作成できるタイプ(クラス)です。したがってthis、クラス名ではなく、現在のインスタンス ( )を参照する必要があります。

var app = app || {};

app.TwitterView = Backbone.View.extend({

  el: '#twitter-container',
  tweets: [],
  loadTweets: function(){

      var self = this;

      $.ajax({
        url: "scripts/php/mixitup.php",
        type: "GET",
        dataType: 'json',
        cache: false,
        success: function (data) {
          console.log(self.tweets) //need to be able to access that tweets array here.
          debugger;
于 2013-11-04T12:14:58.777 に答える