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 你可以使用 context: this 作为对象参数,所以在里面你仍然可以引用 this.tweets

于 2013-11-04T14:16:51.520 回答
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 回答
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 回答