自定义映射整个数组

时间:2014-10-30 16:20:21

标签: knockout.js

我正在尝试使用Knockout应用自定义映射。我有一个包含这个JSON片段的JSON对象:

{
    "feature": { "id": "BEAM_TYPE2" },
    "label": { "ux_value": "BEAM_TYPE", "tooltipText": "" },
    "help": { "ux_title": "BEAM_TYPE_HELP", "ux_value": "BEAM_TYPE_DESCRIPTION" },
    "control": { 
         "type": "dropdown", 
         "options": [
             { "ux_value": "BEAM_TYPE_BOX", "value": "BOX" }, 
             { "ux_value": "BEAM_TYPE_IBEAM", "value": "IBEAM" }, 
             { "ux_value": "BEAM_TYPE_PFC", "value": "PFC" }, 
             { "ux_value": "BEAM_TYPE_OPEN", "value": "OPEN" }, 
             { "ux_value": "BEAM_TYPE_ZTYPE", "value": "ZTYPE" }, 
             { "ux_value": "BEAM_TYPE_BOX_ANGLE", "value": "BOX_ANGLE" }, 
             { "ux_value": "BEAM_TYPE_STEP", "value": "STEP" }
         ], 
         "value": "BOX" 
    }
}

最终options转换为可观察数组并绑定到下拉列表。但是我现在已经决定我实际上想要动态地改变这个数组中的值,而是提供一个计算函数,所以一个虚拟的硬编码示例:

ko.computed(function() {
    return [
       { ux_value: "A", value: "A" },
       { ux_value: "B", value: "B" },
       { ux_value: "C", value: "C" }
    ];
});

我决定在ko.mapping中使用自定义绑定是最好的方法,所以我尝试使用创建功能:

var mapping = {
        'options': {
            create: function (options) {
                debugger;
            }
        }
    };

不幸的是,我发现我为数组中的每个项目都打了断点,所以在显示的例子中我打了7次断点,而我只想打一次并返回结果对象。处理此问题的正确方法是在control而不是options上工作,并手动为所有其他值创建绑定,还是有更简单的方法来执行此操作?

1 个答案:

答案 0 :(得分:1)

您可以尝试向上移动一级并为控件属性创建映射函数。

var mapping = {
        'control': {
            create: function (control) {
                debugger;
            }
        }
    };

并创建添加计算函数。