我正在尝试使用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
上工作,并手动为所有其他值创建绑定,还是有更简单的方法来执行此操作?
答案 0 :(得分:1)
您可以尝试向上移动一级并为控件属性创建映射函数。
var mapping = {
'control': {
create: function (control) {
debugger;
}
}
};
并创建添加计算函数。