0

バックボーンを学ぶための簡単な掲示板アプリを書いています。順調に進んでいます (これの多くの使用は意味がありません) が、dom からフォーム/html を削除する方法に関して少し行き詰まっています。ほとんどのコードを含めましたが、下から 4 行ほど上に、動作していない部分があります。これをDOMから削除するにはどうすればよいですか?

thx事前に

var MbForm=Backbone.View.extend({
  events: {
  'click button.add-new-post': 'savePost'
  },

  el: $('#detail'),
  template:_.template($('#post-add-edit-tmpl').html()),
  render: function(){
    var compiled_template = this.template();
    this.$el.html(compiled_template);
    return this;
  },
  savePost: function(e){
    //var self=this;
    //console.log("I want you to say Hello!");
    data={
     header: $('#post_header').val(),
     detail: $('#post_detail').val(),
     forum_id: $('#forum_id').val(),
     post_id: $('#post_id').val(),
     parent_id: $('#parent_id').val()
    };

    this.model.save(data, {
      success: function(){
        alert('this saved');
        //$(this.el).html('this is what i want');
        this.$el.remove();//  <- this is the part that isn't working


       /* none of these worked - error Uncaught TypeError: Cannot call method 'unbind' of undefined 
        this.$el.unbind();
        this.$el.empty();

        this.el.unbind();
        this.el.empty();
       */

        //this.unbind();
        //self.append('this is appended');
      }
    });
4

1 に答える 1

1

Backbone はsuccess、特定の でコールバックを呼び出すのthisではなく、単に単純な関数として呼び出されます。そのため、コールバックthis内は、期待するビューではなくなります。successwindow

通常のソリューションのいずれかが機能します。

  1. this必要なものをローカル変数に保存します。

    var _this = this;
    this.model.save(data, {
      success: function() {
        //...
        _this.remove();
    
  2. バインドされた関数を使用します。

    this.model.save(data, {
      success: _(function() {
        //...
        this.remove();
      }).bind(this)
    
  3. 名前付きバインド関数を使用します。

    initialize: function() {
        _.bindAll(this, 'save_success');
    }
    //...
    this.model.save(data, {
      success: this.save_success
    

そして、上記の通常のバリエーション。

View#removeまた、ビュー全体を削除しようとしているようで、それが通常の方法であるため、に切り替えたことにも注意してください。

于 2012-12-08T17:37:55.177 に答える