-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'は定義されていません)
誰でも助けることができますか?このコードの変更点は何ですか?
ピョートル
これは悪いです。 jQuery ajaxの 'context'オプションを使うべきです。 2017年以降、コンテキストに応じて 'bind'や矢印関数を使うことができます。 –
もちろん、他にもたくさんの方法がありますが、なぜこれは「悪い」ですか? と..でも、誰もが現代的なWebブラウザを使用しているわけではなく、矢印機能はどこでもサポートされていません。 「バインド」はずいぶん前からありましたが、私にとってはそれがもう少し混乱します – paulitto