代码之家  ›  专栏  ›  技术社区  ›  Shift 'n Tab

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

  •  0
  • Shift 'n Tab  · 技术社区  · 6 年前

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

    索引.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>
    

    索引.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 回复  |  直到 6 年前
        1
  •  4
  •   Gaurav    6 年前
    1. 除了使用操作外,不能从模板调用函数。只能引用属性,例如字段和计算属性。

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

    {{#if (contains array1 field1)}}

    但是已经有人写过了。欢迎来到奇妙的灰烬社区插件!看到了吗 https://github.com/DockYard/ember-composable-helpers#contains

        2
  •  0
  •   Lux    6 年前

    只需将观察者函数替换为计算属性:

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