如何在模板的IF语句中使用带有参数的函数

时间:2018-09-05 13:35:36

标签: ember.js handlebars.js

目前,我正在尝试使用一种可观察余烬模板(车把)中控制器/组件字段的函数。

index.hbs

<div>
   {{ input value=model.field1 }}
   {{if hasFieldError('field1')}}
      <span>This field is required</span>
   {{/if}}
</div>

<div>
   {{ input value=model.field2 }}
   {{if hasFieldError('field2')}}
      <span>This field is required</span>
   {{/if}}
</div>

index.js

hasFieldError: function(val) {
   return true if val is found in an array
}.observes('field1', 'field2'),

但这当然会返回构建错误:

{#if hasFieldError('compa ----------------------^ Expecting 
'CLOSE_RAW_BLOCK', 'CLOSE', 'CLOSE_UNESCAPED', 'OPEN_SEXPR', 
'CLOSE_SEXPR', 'ID', 'OPEN_BLOCK_PARAMS', 'STRING', 'NUMBER', 
'BOOLEAN', 'UNDEFINED', 'NULL', 'DATA', 'SEP', got 'INVALID'

有什么想法要实现吗?

2 个答案:

答案 0 :(得分:3)

  1. 除非使用操作,否则无法从模板调用函数。您只能引用属性,例如字段和计算的属性。

  2. 观察者通常不是一个好主意

  3. 您是否真的要确定field1的值是否在数组中?假设该数组位于array1处。然后,您可以编写一个名为contains的助手:

{{#if (contains array1 field1)}}

但是有人已经写了这个。欢迎来到精彩的Ember插件社区!参见https://github.com/DockYard/ember-composable-helpers#contains

答案 1 :(得分:0)

只需将您的观察者函数替换为计算出的属性即可:

hasFieldError: Ember.computed('field1', 'field2', function(val) {
   return true if val is found in an array
}),