我有一个变量,用于启用某些功能以进行编辑或看起来不像这样
enabled: !(parseInt("@Model.Status") === @((int)Status.Active) ||
!(parseInt("@Model.Status") === @((int)Status.Expired)) && '@Model.EditMode' === 'True'),
出于某种原因,如果这适用于状态为active
而不是expired
的用户,并且如果我将其转过来并放在expired
的开头,则它适用于expired
,但不能使用active
个...。所以我在这里错了,有人认为,如果状态为Expired
或Active
,则启用应为false,以便不能将其替换为所有其他状态应该没事。
我也试图用第二个语句的括号将其写成这样
!((parseInt("@Model.Status") === @((int)Status.Expired))
像这样颠倒if,但没有一个解决
(parseInt("@Model.Status") !== @((int)Status.Expired)
Pointy的好评!但是不幸的是,这也不是问题,因为即使我跳过了整个&&运算符,我仍然遇到同样的问题
!(parseInt("@Model.Status") === @((int)Status.Active) || !(parseInt("@Model.Status") === @((int)Status.Expired)))
这仍然会带来相同的问题
答案 0 :(得分:2)
您的情况似乎不对。 !(parseInt("@Model.Status") === @((int)Status.Active) || !(parseInt("@Model.Status") === @((int)Status.Expired)) && '@Model.EditMode' === 'True')
可以看成!(a || !(b) && c)
,其中
a = parseInt("@Model.Status") === @((int)Status.Active)
b = parseInt("@Model.Status") === @((int)Status.Expired)
c = '@Model.EditMode' === 'True'
AND运算符(&&
)的优先级高于||
,因此可以使用分组为!(a || (!(b) && c))
来显示实际评估顺序,就像评估2 + 3 * 4
的方式一样为2 + (3 * 4)
。
但是,提出的逻辑与要求不符。除了活动或已过期的和编辑模式外,该状态均应为“ True”。但是,由于方括号( entire )逻辑表达式被否定,并且第二个条件也被否定了,因此括号可能由于拼写错误而错配了。
正确的逻辑表达式是!(a || b) && c
。替换逻辑测试:
!(parseInt("@Model.Status") === @((int)Status.Active) || parseInt("@Model.Status") === @((int)Status.Expired) &&
'@Model.EditMode' === 'True'
我对Kendo不熟悉,但是如果可以使用!==
,则可以通过删除一些括号来简化表达式。根据{{3}} !(a || b)
等效于!a && !b
,因此,如果执行该替换,则得到!a && !b && c
。如果我们也从!(parseInt("@Model.Status") === @((int)Status.Active))
更改为parseInt("@Model.Status") !== @((int)Status.Active)
,那么我们最终得到:
parseInt("@Model.Status") !== @((int)Status.Active) &&
parseInt("@Model.Status") !== @((int)Status.Expired) &&
'@Model.EditMode' === 'True'