1

我没有成功地让销毁策略对任何同级属性或同级对象起作用。它仅适用于对象的兄弟数组。请检查这个例子:

$scope.schema = {
    "type": "object",
    "properties": {
        "propertyOne": {
            "type": "string",
            "enum": ["option1", "option2"],
            "title": "Property One Select"
        },
        "propertyTwo": {
            "type": "string",
            "enum": ["option3", "option4"],
            "title": "Property Two Select"
        },
        "objectOne": {
            "type": "object",
            "properties": {
                "objectOnePropertyThree": {
                    "type": "string",
                    "enum": ["option5","option6"],
                    "title": "Property Three Select"
                }
            }
        },
        "arrayOfObjects": {
            "type": "array",
            "items": {
               "type": "object",
                "properties": {
                    "arrayObjectPropertyFour": {
                            "type": "string",
                            "enum": ["option7","option8"],
                            "title": "Property Four Select"
                        }
                }
            }
        }
    },
    "required": ["propertyOne"]
};


$scope.form = [{
    "key": "propertyOne"
}, {
    "key": "propertyTwo",
    "condition": "model.propertyOne === \"option1\""

},{
    "key": "objectOne.objectOnePropertyThree",
    "condition": "model.propertyOne === \"option1\""
},{
    "key": "arrayOfObjects",
    "condition": "model.propertyOne === \"option1\""
},
{
    "type": "submit",
    "title": "Save"
}];

http://jsfiddle.net/mutharasus/dp18a70b/ 在这里,如果您选择第一个下拉菜单到“Option1”,然后选择所有其他下拉菜单并保存。然后返回并将第一个下拉菜单切换到“Option2”并保存,您可以看到只有最后一个对象数组被销毁策略删除。

我做错了什么还是这是角度模式形式的错误?我查看了 github 项目中当前打开的问题,但没有看到关于此的未解决问题。

4

1 回答 1

3

您是对的,当单个字段由于某种条件而从视图中删除时,它当前的行为方式与您期望的方式不同。

以下是正在发生的事情:在 ASF 的“旧”捆绑装饰器下,每个字段类型的装饰器都呈现在页面上的外部标记内。然后处理和呈现相应字段模板的内容。条件逻辑适用于标签内的所有内容,但不适用于标签本身。通常,这会很好,但 destroyStrategy 逻辑已分配给标签的 $destroy 事件。最终结果是 $destroy 事件将永远不会触发,除非整个标签将从 DOM 中删除。这就是为什么要清理对象数组中的模型值的原因 - 当“model.propertyOne === 'option1'”条件失败时删除容器,这会将 $destroy 事件级联到数组中的每个对象。

我认为新构建器的创建和发布忽略了这一点,因为我在 PR 结束时提出了该功能的问题(https://github.com/Textalk/angular-schema-form/pull/371)。

从好的方面来说,新的构建器方法(您可以通过从https://github.com/Textalk/angular-schema-form-b ​​ootstrap 添加 bootstrap-decorator 文件来使用)没有这个问题。相反,destroyStrategy 逻辑通过指令应用于表单字段,因为不再使用标记。除非您此时需要继续使用旧装饰器,否则我建议您购买新装饰器并尝试一下。

让我们知道怎么回事!

于 2015-08-29T03:03:09.547 回答