【发布时间】:2023-04-07 08:55:01
【问题描述】:
我正在尝试使用 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 并为所有其他值手动创建绑定,还是有更简单的方法?
【问题讨论】:
-
选项对象将如何以及何时动态变化?
-
@NathanFisher 计算值可能会在绑定后的任何时间点发生变化。本质上将添加一条规则,其他可观察对象将更改可用选项
标签: knockout.js