我有这个输入,我想改变它的状态,使它可以是只读或可编辑的。
<input type="text" data-bind="attr: {readonly: isViewMode || isNotEditableInvoice}, value: model.DateFormatted" />
问题是当我不用括号来表示变量时。
第一种情况:isViewMode = true
,isNotEditableInvoice = false
=〉readonly的计算结果为true
第二例:isViewMode = false
,isNotEditableInvoice = true
=〉只读被评估为假
我也有这个按钮,我想只在用户处于编辑模式时显示它。
<input type="button" value="Save" data-bind="visible: !isReadOnly || isEditableInvoice,click: onUpdate" />
我在使用括号时也有类似的问题,我想知道那里发生了什么。
第三种情况:isReadOnly = false
,isEditableInvoice = false
=〉可见设置为假
第四例:当我对isReadOnly
使用括号时,它工作得很好,结果和上面的一样,但是不知何故它被求值为true。为什么isEditableInvoice
在没有括号的情况下被排除在求值之外?
为什么在我不用括号的情况下会发生这种情况,这背后的逻辑是什么?
1条答案
按热度按时间3yhwsihp1#
因为knockout解析器/绑定器检查您是否绑定了一个表达式(而不是一个属性),所以它将按原样计算表达式。
除非显式调用计算a.k.a并在末尾添加括号,否则您只是在计算表达式'!isReadOnly||isEditableInvoice“,并且字段不被视为可观察的,而是照原样处理。
isReadOnly在js条件下被评估为非未定义,因此为true。
例如,针对单个属性进行的不同绑定类似于if/visible绑定。
你能做到
但你不能这样做
不加括号,比如:
因为一旦添加了!运算符,解析器就会将其视为js表达式,而不是可观察的字段