物件的使用處理,作用域的和ajax中this的理解

夢裡一米七八發表於2018-12-29

首先,封裝類,理解清楚你需要用的哪幾個變數,然後宣告,然後在類裡封裝函式,其中,constructor就是存放初始變數的地方。

這裡還是datatable的處理解決,

constructor(table) {
        this.data = {};
        this.table = table

    }
inittable(table) {
        for (var i = 0; i < this.data.rowdata.length; i++) {
            this.data.rowdata[i].submit_status = 0
        }
        this.data.col_define[this.data.col_define.length] = {
            `targets`: this.data.col_define.length,
            `title`: `上傳狀態`,
            `data`: `submit_status`,
            `render`: function (data, type, full, meta) {
                if (1 === data) {
                    return `上傳成功`
                } else if (2 === data) {
                    return `上傳失敗`
                } else {
                    return `未上傳`
                }
            }
        };
        console.log(this.data.col_define);
        console.log(this.data.rowdata);
        this.table = $(table).DataTable({
            `language`: lan,
            "dom": `lB<"top"f><"toolbar">rt<"bottom"ip><"clear">`,
            "paging": true,
            "lengthChange": true,
            "info": true,
            `destroy`: true,
            "deferRender": true,
            `columns`: this.data.col_define,
            `data`: this.data.rowdata,
        })
    }

在功能裡配置表格的配置,然後之前的res結果中的data改成this即可

 success: function (res) {
            if (`ok` === res[`code`]) {
                if (department === 1) {
                    salary_table = $(`#primary_excel_table`)
                } else if (department === 2) {
                    salary_table = $(`#middle_excel_table`)
                } else if (department === 3) {
                    salary_table = $(`#logistics_excel_table`)
                }
                alert(`解析完成!`);
                console.log(`返回資料是`, res[`data`]);
                sal.data = res[`data`];
                console.log(sal.data);
                sal.inittable(modal_table);

這樣子,就能利用類,來動態定義表格,而且submit裡也直接配置了,不用再用之前部落格裡的render功能,

還有就是,字串的拼接

comcat_string(salary_info) {
        var items = [];
        Object.keys(salary_info).forEach(function (key) {
            if (key !== `名字` && key !== `部門` && key !== `身份證` && key !== `submit_status`) {
                items.push([key, salary_info[key]].join(`:`));
            }
        });
        return items.join(`|`)
    }

用到forEach方法,JS遍歷可以查詢的到方法類。

再者,就是ajax中,如果想要呼叫this下的變數,需要提前在外部宣告

_this=this

然後類似

    _this.data.rowdata[a][`submit_status`] = 1;

自己看的,不喜勿噴,前端實習第11天,我也忘了具體,反正差不多是11把,頭很痛。。。。啦啦啦啦啦德瑪西亞

 

相關文章