无法从外部访问ember-pikaday onSelection中的日期

时间:2017-07-24 09:52:36

标签: javascript ember.js ember-components pikaday

你们中有没有人使用过ember-pikaday插件吗?我想将val中的日期设置为onSelection,但onSelection中的上下文是插件而不是组件本身。有没有办法将selectedDate的值存储到我的组件中的某个属性?

我的代码是这样的:

date

它给了我这个错误:

import Ember from 'ember';

export default Ember.Component.extend({
  classNames: ['schedule-nav-date-picker'],
  selectedDate: null,

  onSelection: function(date) {
    this.set('selectedDate', date);
    return date;
  },

  actions: {
    saveClicked () {
        this.sendAction('saveClicked', this.get('selectedDate'));
    },

    cancelClicked () {
      this.sendAction('cancelClicked');
    }

  }
});

这是模板,(我们使用Emblem进行模板化):

pikaday.js:165 Uncaught TypeError: this.get(...) is not a function
at Class.userSelectedDate (pikaday.js:165)
at Class.onPikadaySelect (pikaday.js:151)
at Backburner.run (ember.debug.js:224)
at Backburner.join (ember.debug.js:247)
at Function.run.join (ember.debug.js:15904)
at Pikaday.<anonymous> (ember.debug.js:15966)
at Pikaday.setDate (pikaday.js:815)
at HTMLDivElement.Pikaday.self._onMouseDown (pikaday.js:462)

1 个答案:

答案 0 :(得分:1)

使用action帮助程序的一个主要好处是它会自动为您准备this个上下文;当你使用它。例如,如果您传递函数onSelection而没有像{{pikaday-inputless onSelection=onSelection}}那样的动作帮助器那么&#34;这个上下文&#34;将是处理函数pikaday-inputless中的onSelection组件而不是您自己的组件(父组件)。这就是kumkanillam在本评论中已经提到的内容。因此,您需要将pikaday-inputless onSelection=(action 'onSelection')用于&#34;此背景&#34;成为你自己的组成部分。

我准备了一个非常简单的twiddle,以说明使用动作助手可以顺利进行。您只需将动作处理程序放在组件的actions json声明中即可。查看旋转中的my-component。它完成了我上面已经总结的内容。希望这会有所帮助。