是否有一个javascript框架来应用表单的动态更改规则?

时间:2014-02-10 13:09:05

标签: javascript asp.net-mvc

我正在寻找一个javascript框架来应用表单动态更改的规则。 我的Web应用程序是用ASP.NET MVC 5编写的。我有一个大的形式,其中某些控件的状态由其他控件的值驱动(例如,当用户将值更改为“b”时,此更改应该暗示其他更改 - 一些控件应隐藏,一些标签应更改文本,一些文本框应更改自己的值,这意味着其他一些更改等。当我回到“a”时,应该撤消更改)。

我想:

  • 避免使用一些意大利面条,丑陋的javascript代码以及许多ifs,elses和change events
  • 在业务层中保存业务规则(例如在XML文件中)并将它们推送到ViewModel内部的客户端。我可以编写自己的解析器来应用规则
  • 解决方案必须是通用的(所有表单都有一个解决方案,它们之间的唯一区别是带有规则的静态文件)
  • 解决方案应该是客户端(没有AJAX和页面重新加载)

你知道能满足我需求的东西吗?

编辑:

我有这个带有规则的XML文件。组之间存在逻辑OR,条件之间存在逻辑AND。换句话说 - 如果在任何组中满足所有条件 - 应该执行操作(例如show元素),否则执行反向操作(例如隐藏元素)。

我不想在客户端重写这个逻辑(例如作为淘汰ViewModel的一部分),而是我想将它应用于类似于业务规则引擎的东西,它可以为我处理所有逻辑执行。 你知道任何可以这种方式工作的框架吗?

<ValidationModel>
    <Action Obj="manual-edit-block" Type="Visible">
        <Group>
            <Condition Neg="0" Obj="source-type" Type="EQUAL" Val="E" />
        </Group>
    </Action>
    <Action Obj="details-block" Type="Visible">
        <Group>
            <Condition Neg="0" Obj="source-type" Type="EQUAL" Val="C" />
        </Group>
    </Action>
    <Action Obj="details-representative-block" Type="Visible">
        <Group>
            <Condition Neg="0" Obj="source-type" Type="EQUAL" Val="E" />
        </Group>
    </Action>
    <Action Obj="allows-unassign-block" Type="Visible">
        <Group>
            <Condition Neg="0" Obj="source-type" Type="EQUAL" Val="E" />
        </Group>
    </Action>
    <Action Obj="algorithm-block" Type="Visible">
        <Group>
            <Condition Neg="0" Obj="source-type" Type="EQUAL" Val="G" />
        </Group>
        <Group>
            <Condition Neg="0" Obj="source-type" Type="EQUAL" Val="D" />
        </Group>
    </Action>
    <Action Obj="algorithm_base" Type="Value" Value="12">
        <Group>
            <Condition Neg="0" Obj="source-type" Type="EQUAL" Val="G" />
        </Group>
    </Action>
    <Action Obj="algorithm_base" Type="Value" Value="15">
        <Group>
            <Condition Neg="1" Obj="source-type" Type="EQUAL" Val="G" />
        </Group>
    </Action>
    <Action Obj="identifier-block" Type="Visible">
        <Group>
            <Condition Neg="0" Obj="source-type" Type="EQUAL" Val="E" />
        </Group>
        <Group>
            <Condition Neg="0" Obj="source-type" Type="EQUAL" Val="F" />
            <Condition Neg="0" Obj="algorithm_base" Type="HASCLASS" Val="valid" />
        </Group>
    </Action>

1 个答案:

答案 0 :(得分:0)

nools似乎正是我要找的。它提供了很好的规则语法,适用于客户端。