Javascript 指的是“外部”的模型;这";上下文

Javascript 指的是“外部”的模型;这";上下文,javascript,jquery,backbone.js,backbone-views,Javascript,Jquery,Backbone.js,Backbone Views,我正在尝试为一个事件设置listenTo,该事件不在我视图中当前的“this”上下文中 在我的“评论”观点中,我有: var app = app || {}; app.CommentView = Backbone.View.extend({ tagName: 'div', template: _.template( $('#comment-template').html() ), // "<event> <selector>" : "<metho

我正在尝试为一个事件设置listenTo,该事件不在我视图中当前的“this”上下文中

在我的“评论”观点中,我有:

var app = app || {};

app.CommentView = Backbone.View.extend({

  tagName: 'div',

  template: _.template( $('#comment-template').html() ),

  // "<event> <selector>" : "<method>" aka function defined below
  events: {
    'click .up' : 'addUpVote',
    'click .down' :'subtractUpVote',
    'click .destroy_comment' : 'removeOneComment',
    'click .destroy-vote' : 'destroyVote'
  },

  initialize: function() {
    this.render();
    this.listenTo(app.Vote, 'add', this.render); // THIS DOESN'T WORK
    this.listenTo(this.model,'change', this.render);
    this.listenTo(this.model, 'destroy', this.remove);
  },

  render: function() {
    this.$el.html( this.template( this.model.toJSON() ) );
    this.$el.find('#vote-buttons').html();//(PASS IN VOTE TEMPLATE//);
    this.$el.attr('comment_id', this.model.get('id'));

    return this;
  },

removeOneComment: function() {
    this.model.destroy();
  },

voteAttributes: function() {
  return {
    comment_id: this.model.get('id'),
    };
  },

addUpVote: function( event ) {
  var vote = new app.Vote(this.voteUpAttributes());
  vote.save({
    success: function (vote) {
      vote.toJSON();
    }
  });
},

voteUpAttributes: function() {
  return {
    comment_id: this.model.get('id'),
    upvote: 1
  };
},

subtractUpVote: function ( event ) {

  var vote = new app.Vote(this.voteDownAttributes());
  vote.save({
    success: function (vote) {
      vote.toJSON();
    }
  });
},

voteDownAttributes: function() {
  return {
    comment_id: this.model.get('id'),
    downvote: -1
  };
}

});

我的方法正确吗?如果有人有任何建议,我将不胜感激,谢谢

如果我理解正确,您正在收听模型上的add事件,因此您的方法似乎不正确

将模型添加到集合时会触发“添加”事件(模型没有添加事件,集合有)

从“添加”(模型、集合、选项)-将模型添加到集合时

因此,您可以为您的投票创建一个集合,并侦听该集合上的添加事件,该事件将在您向投票集合添加投票模型时触发

因此,您可以侦听模型与服务器成功同步时将触发的“同步”事件,而不是侦听模型没有的“添加”事件。但这仍然不起作用,因为您正在模型定义(app.Vote)上侦听事件,而不是在使用该定义创建的实例上侦听事件。代码中的实例是varvote=new app.vote(this.voteDownAttributes());。因此,如果为投票创建集合,则需要在该集合的实例上而不是集合定义上侦听“添加”事件

另一种方法是在addUpVote和subtractUpVote方法的save方法的成功回调中调用this.render()(这不是最好的方法,但目前可能还可以)。在您的代码中,可能会出现如下情况:

addUpVote: function( event ) {
  var self = this;
  var vote = new app.Vote(this.voteUpAttributes());
  vote.save({
    success: function (vote) {
      vote.toJSON();
      self.render();
    }
  });
},

如果我理解正确,您正在收听模型上的add事件,因此您的方法似乎不正确

将模型添加到集合时会触发“添加”事件(模型没有添加事件,集合有)

从“添加”(模型、集合、选项)-将模型添加到集合时

因此,您可以为您的投票创建一个集合,并侦听该集合上的添加事件,该事件将在您向投票集合添加投票模型时触发

因此,您可以侦听模型与服务器成功同步时将触发的“同步”事件,而不是侦听模型没有的“添加”事件。但这仍然不起作用,因为您正在模型定义(app.Vote)上侦听事件,而不是在使用该定义创建的实例上侦听事件。代码中的实例是varvote=new app.vote(this.voteDownAttributes());。因此,如果为投票创建集合,则需要在该集合的实例上而不是集合定义上侦听“添加”事件

另一种方法是在addUpVote和subtractUpVote方法的save方法的成功回调中调用this.render()(这不是最好的方法,但目前可能还可以)。在您的代码中,可能会出现如下情况:

addUpVote: function( event ) {
  var self = this;
  var vote = new app.Vote(this.voteUpAttributes());
  vote.save({
    success: function (vote) {
      vote.toJSON();
      self.render();
    }
  });
},

如果我理解正确,您正在收听模型上的add事件,因此您的方法似乎不正确

将模型添加到集合时会触发“添加”事件(模型没有添加事件,集合有)

从“添加”(模型、集合、选项)-将模型添加到集合时

因此,您可以为您的投票创建一个集合,并侦听该集合上的添加事件,该事件将在您向投票集合添加投票模型时触发

因此,您可以侦听模型与服务器成功同步时将触发的“同步”事件,而不是侦听模型没有的“添加”事件。但这仍然不起作用,因为您正在模型定义(app.Vote)上侦听事件,而不是在使用该定义创建的实例上侦听事件。代码中的实例是varvote=new app.vote(this.voteDownAttributes());。因此,如果为投票创建集合,则需要在该集合的实例上而不是集合定义上侦听“添加”事件

另一种方法是在addUpVote和subtractUpVote方法的save方法的成功回调中调用this.render()(这不是最好的方法,但目前可能还可以)。在您的代码中,可能会出现如下情况:

addUpVote: function( event ) {
  var self = this;
  var vote = new app.Vote(this.voteUpAttributes());
  vote.save({
    success: function (vote) {
      vote.toJSON();
      self.render();
    }
  });
},

如果我理解正确,您正在收听模型上的add事件,因此您的方法似乎不正确

将模型添加到集合时会触发“添加”事件(模型没有添加事件,集合有)

从“添加”(模型、集合、选项)-将模型添加到集合时

因此,您可以为您的投票创建一个集合,并侦听该集合上的添加事件,该事件将在您向投票集合添加投票模型时触发

因此,您可以侦听模型与服务器成功同步时将触发的“同步”事件,而不是侦听模型没有的“添加”事件。但这仍然不起作用,因为您正在模型定义(app.Vote)上侦听事件,而不是在使用该定义创建的实例上侦听事件。代码中的实例是varvote=new app.vote(this.voteDownAttributes());。因此,如果为投票创建集合,则需要在该集合的实例上而不是集合定义上侦听“添加”事件

另一种方法是在addUpVote和subtractUpVote方法的save方法的成功回调中调用this.render()(这不是最好的方法,但目前可能还可以)。在您的代码中,可能会出现如下情况:

addUpVote: function( event ) {
  var self = this;
  var vote = new app.Vote(this.voteUpAttributes());
  vote.save({
    success: function (vote) {
      vote.toJSON();
      self.render();
    }
  });
},

我想应该是
this.listenTo(this.model'all',this.render)
但是你