2017-08-18 6 views
-2

BACKBONEとjQueryBACKBONE.JS - 私はコード片持ち方法

を解く:私は方法

this.build(json.message, page); 

を構築したい。しかし、何かがうまくいかないAJAXの方法で

var ChatMessage = Backbone.View.extend({ 
    el : '#friend-list', 
    events : {}, 
    initialize : function() {}, 
    loadMessage : function(parent_id) { 
     //ukrycie komunikatów etc. 
     $("#chat_body").html(''); 
     $("#end-record-info").hide(); 
     $("#end-record-load").hide(); 
     page = 1; 
     this.ajax(parent_id,page); //initial data load 
    }, 

    ajax : function(parent_id,page) { 
     $.getJSON("/**/**/"+parent_id+"/"+page, function(json) { 
      $("#end-record-load").hide(); 
      this.build(json.message, page); 
      page ++; //page increment 
      loading = false; //set loading flag off 
      end_record = false; 
      if(json.max < page){ //no more records 
       end_record = true; //set end record flag on 
       return; //exit 
      } 
     }); 
    }, 

    build : function(arr, page) { 
     alert('dgd'); 
     html = ''; 
     var height = 0; 
     arr.reverse(); 
     $.each(arr, function(i, data){ 
      html += '<div class="answer '+data.side+'">'; 
      html += '<div class="avatar">'; 
      html += '<a href="**" target="_blank">'; 
      html += ''+data.id+''; 
      html += '</a>'; 
      html += '<div class="status offline"></div>'; 
      html += '</div>'; 
      html += '<div class="name">'; 
      html += '<a href="**" target="_blank">'; 
      html += data.username; 
      html += '</a>'; 
      html += '</div>'; 
      html += '<div class="text">'; 
      html += data.content; 
      html += '</div>'; 
      html += '<div class="time">'; 

      if (data.side != 'left') { 
       html += data.dateSendMessage 
      } 
      else { 
       if (data.read == 0) { 
        html += 'xxx'; 
       } 
       else { 
        html += 'xxx'; 
       } 
      } 
      html += '</div>'; 
      html += '</div>'; 
     }); 

     var nh = $('#chat_body').html(); 
     $('#chat_body').html(html+nh); 

     if (page == 1) { 
      $('#chat_body .answer').each(function(i, value){ 
       height += parseInt($(this).height()); 
      }); 

      height += ''; 
      $('.chat2').scrollTop(height); 
     } 
    } 
}); 

を私はエラーが発生します。

pm2.js:67TypeError:this.buildは関数ではありません。 ( 'this.build(json.message、page)'、 'this.build'は定義されていません)

誰でも助けることができますか?このコードの変更点は何ですか?

ピョートル

答えて

1

おそらくgetJSONを呼び出す前に、現在のコンテキストを保存する必要があります。

ajax : function(parent_id,page) { 
    var self = this; 
    $.getJSON("/**/**/"+parent_id+"/"+page, function(json) { 
     ... 
     self.build(json.message, page); 
+1

これは悪いです。 jQuery ajaxの 'context'オプションを使うべきです。 2017年以降、コンテキストに応じて 'bind'や矢印関数を使うことができます。 –

+0

もちろん、他にもたくさんの方法がありますが、なぜこれは「悪い」ですか? と..でも、誰もが現代的なWebブラウザを使用しているわけではなく、矢印機能はどこでもサポートされていません。 「バインド」はずいぶん前からありましたが、私にとってはそれがもう少し混乱します – paulitto

関連する問題