Backbone.js - 解决方法

时间:2017-08-18 06:37:59

标签: javascript jquery ajax backbone.js

BACKBONE和Jquery

我有一段代码:

    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);
        }
    }
});

在AJAX方法中,我想构建方法

  this.build(json.message, page);

但有些东西不起作用,我收到错误。

pm2.js:67TypeError:this.build不是函数。 (在'this.build(json.message,page)'中,'this.build'未定义)

有人可以帮忙吗?顺便说一下,这段代码有什么变化?

·彼得

1 个答案:

答案 0 :(得分:1)

您应该在调用getJSON之前保存当前上下文:

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