首页 > 解决方案 > target.status 值未定义

问题描述

var getOptArray = function (opt) {
    var len = opt.length;
    var res = [];
    for (var i = 0; i < len; i++) {
        res.push({text: (opt[i].text), value: opt[i].value, icon: opt[i].icon, color: opt[i].color});
    }
    return res;
}

var BLOG_CATEGORY_STATUS = {
    prop: {text: "status", defval: false, class: "", size: "text-sm", margin: "m-r-xs", editable: [1, 2], tooltip: true},
    publish: {text: "publishing", value: 1, icon: "fa fa-play", color: "green", question: "Publish"},
    pause: {text: "paused", value: 2, icon: "fa fa-pause", color: "warning", question: "Pause"},
    deleted: {text: "deleted", value: 3, icon: "fa fa-trash", color: "danger", question: "Delete"},
    optArr: function () {
        return getOptArray([this.publish, this.pause, this.deleted]);
    },
    /**
     * opt example -> {status: foo, categoryId: fooValue, callback: fooFunction}
     * @param {type} opt
     */
    buildButton: function (opt) {
        opt = opt || {};
        var optArray = this.optArr();
        var targetStatus = optArray[(opt.status) - 1];
        console.log(targetStatus);
        console.log(targetStatus.color); //prints "warning"
        console.log(targetStatus.question); //prints "undefined"

        var but = {}; 
        return but;
    }
};


$(function () { 
    BLOG_CATEGORY_STATUS.buildButton({categoryId: 1 
            , status: 2
            , callback: function () {
                console.log("test");
            }})
});

我编辑代码以在 jsfiddle 中添加为问题。它已准备好在 jsfiddle 中运行

在 buildButton 函数中,targetStatus.color 是警告,对于同一个对象,targetStatus.question 是未定义的。看不到我错过了什么。

标签: javascript

解决方案


您可能缺少question以下返回值中的数据getOptArray

res.push({
  text: opt[i].text, 
  value: opt[i].value, 
  icon: opt[i].icon, 
  color: opt[i].color, 
  question: opt[i].question    // <- here
});

其中,当您使用它时,您可能应该将这一行重写为:

res.push(opt[i]);

推荐阅读