Ember“传递的操作为空或在(操作)中未定义”错误

xbp102n0  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(147)

我有一个Ember组件checkout-form,它包含一些处理结帐过程的逻辑。

{{#checkout-form}}

  {{#each model.courses.otherDates as |date|}}
    {{course-date model=date selectDate=(action selectDate) }}
  {{/each}}

{{/checkout-form}}

checkout-form.js组件中,我执行了以下操作:

selectDate(day) {
  this.set("startAt", day.get("serverString"))
}

最后,在course-date.js组件中,我有:

click () {
  const courseStart = this.get('courseStart')
  this.get('selectDate')(courseStart)
}

但是,在运行此代码时,我得到错误:

ember.debug.js:19818 Assertion Failed: Action passed is null or undefined in (action) from <site@controller:checkout/date::ember389>.

我在这里遗漏了什么?我正在将操作传递到course-date组件中,但不确定它为什么要请求控制器?

toe95027

toe950271#

错误原因是,
您正在访问selectDate,它在该作用域(即控制器)中未定义。如果您在将打印selectDate value is undefined的checkout-form中执行{{log 'selectDate value is ' selectDate}},那么如果您要访问组件中定义的任何属性和操作,则该组件应生成这些值。
下面是twiddle which demonstrates如何从组件中产生操作。
application.hbs

{{#checkout-form as |selectDate| }}
 {{!-- 
 here context is controller not the checkout-form component
 Whatever you want to access from component, then component should yield those values.
 --}}
 {{course-date selectDate=(action 'selectDateInController')}}
 {{course-date selectDate=selectDate}}
{{/checkout-form}}

application.js

import Ember from 'ember';
export default Ember.Controller.extend({
  appName: 'Ember Twiddle',
  actions:{
    selectDateInController(){
      console.log(' selectDate in controller');
    }
  }
});

templates/components/checkout-form.hbs -在这里,我们将生成selectDate操作

{{yield (action 'selectDate')}}

components/checkout-form.js

import Ember from 'ember';

export default Ember.Component.extend({
   actions:{
    selectDate(){
      console.log(' selectDate in checkout-form component');
    }
  }
});

course-date.hbs -这里我们只是使用传递给这个组件的关闭操作。

<button {{action selectDate}}> CourseDate </button>

相关问题