我还没有成功地让销毁策略在任何兄弟属性或兄弟对象上工作。它只适用于对象的同级数组。请检查此示例:
$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"
}];然后返回并将第一个下拉菜单切换为"Option2“并保存您可以看到,使用销毁策略只删除了最后一个对象数组。
是我做错了什么,还是这是angular-schema-form中的一个bug?我查看了github项目中当前开放的问题,但我没有看到关于这方面的开放问题。
发布于 2015-08-29 11:03:10
您是对的,当单个字段因条件而从视图中删除时,它当前的行为方式与您预期的不同。
事情是这样的:在ASF的“旧”捆绑装饰器下,每个字段类型的装饰器都呈现在页面上的一个外部标记中。然后处理并呈现相应字段模板的内容。条件逻辑适用于标记内的所有内容,但不适用于标记本身。通常,这很好,但是destroyStrategy逻辑被分配给标记的$destroy事件。最终的结果是,除非从DOM中删除整个标记,否则永远不会触发$destroy事件。这就是为什么要清理对象数组中的模型值-当"model.propertyOne === 'option1'“条件失败时,容器会被移除,这会将$destroy事件级联到数组中的每个对象。
我认为在创建和发布新的构建器时,这一点被忽略了,因为我在功能(https://github.com/Textalk/angular-schema-form/pull/371)的PR结束时提出了这个问题。
好的一面是,新的构建器方法(您可以通过添加来自https://github.com/Textalk/angular-schema-form-bootstrap的引导装饰器文件来使用)没有这个问题。相反,destroyStrategy逻辑通过指令应用于表单域,因为不再使用标记。除非您现在需要使用旧的装饰器,否则我建议您抓紧新的装饰器,并尝试一下。
让我们知道它的进展!
https://stackoverflow.com/questions/32253453
复制相似问题