Oracle JET中oj-bind-text和oj-bind-if加NOT运算符返回值相同怎么办
问题根因分析
- 根因1:
presenter.isValid是Knockout Observable类型,你在表达式内直接对Observable对象做逻辑运算时,Oracle JET不会自动为你解包Observable的值
Knockout的Observable本质是函数对象,属于JS里的truthy值,所以!presenter.isValid永远返回false,而[[presenter.isValid]]在渲染时JET会自动解包取到Observable的实际值,就会出现两个绑定输出不符合预期的情况。 - 根因2:表达式语法解析问题,如果你使用的JET版本较低,部分旧版本对绑定内的一元运算符支持存在缺陷,直接在变量前加
!会被错误解析。
修复方案
- 针对Observable未正确解包的场景,显式调用Observable取其值再做运算:
<oj-bind-text value="[[presenter.isValid]]"></oj-bind-text> <oj-bind-text value="[[!presenter.isValid()]]"></oj-bind-text>
如果是在oj-bind-if中使用,写法同理:
<oj-bind-if test="[[!presenter.isValid()]]"> <!-- 对应展示内容 --> </oj-bind-if>
- 若使用的是较旧版本的JET,可以把取反逻辑封装成ViewModel层的计算属性(Computed Observable),视图层直接绑定计算属性即可:
// ViewModel中定义 presenter.isNotValid = ko.computed(() => !presenter.isValid());
视图层直接绑定:
<oj-bind-text value="[[presenter.isNotValid]]"></oj-bind-text>
内容的提问来源于stack exchange,提问作者Jaime Villaseñor
相关产品推荐
相关产品推荐

