javascript - Ember.js 每周日历导航

标签 javascript ember.js calendar ember-cli

我正在为我的应用程序构建一个简单的每周日历组件,并且我正在努力寻找一种创建周导航的方法。这是我到目前为止所拥有的:

/week-view/component.js

import Ember from 'ember';

export default Ember.Component.extend({
  firstDay: moment().startOf('week'),

  days: Ember.computed('firstDay', function() {
    let firstDay = this.get('firstDay').subtract(1, 'days');
    let week = [];
    for (var i = 1; i <= 7; i++) {
      var day = firstDay.add(1, 'days').format('MM-DD-YYYY');
      week.push(day);
    }
    return week;
  }),

  actions: {
    currentWeek() {
      this.set('firstDay', moment().startOf('week'));
    },
    previousWeek() {
      this.set('firstDay', moment().startOf('week').subtract(7, 'days'));
    },
    nextWeek() {
      this.set('firstDay', moment().startOf('week').add(7, 'days'));
    }
  }
});

/week-view/template.hbs

<button {{action "previousWeek"}}>previous</button>
<button {{action "currentWeek"}}>current week</button>
<button {{action "nextWeek"}}>next</button>
<ul>
  {{#each days as |day|}}
    <li>{{day}}</li>
  {{/each}}
</ul>

目前,它只能导航到当前一周的前一周和后一周。任何有关如何使这项工作无限期工作的想法都将受到高度赞赏。提前致谢。

最佳答案

我认为您在准备周数组(在计算函数中)时不应该更改您的 firstDay 属性。它会覆盖 momentjs 状态。在这种情况下,计算属性应该只读取 firstDay 属性,而不影响对其的更改。

此外,在上周和下周的操作中,您不必创建新的 momentjs 对象。例如,您可以轻松地操作之前创建的 firstDay 属性。

this.get('firstDay').subtract(7, 'days');

但在这种情况下,momentjs 的状态发生了变化,但 emberjs 没有看到任何变化。这是因为您的 firstDay 属性并未真正更改(并且计算属性设置为仅检查 firstDay,它无法深入工作)。事实上,firstDay属性只是对momentjs对象的引用,并且该对象已被更改,而不是引用。但幸运的是,您可以通过以下方式手动强制 emberjs 重新加载基于任何属性的任何计算属性:

this.notifyPropertyChange('firstDay');

重构后的工作示例看起来像这样:

import Ember from 'ember';

export default Ember.Component.extend({
  selectedWeek: moment().startOf('week'),

  days: Ember.computed('selectedWeek', function() {
    let printDay = this.get('selectedWeek').clone();
    let week = [];
    for (var i = 1; i <= 7; i++) {
      week.push(printDay.format('MM-DD-YYYY'));
      printDay.add(1, 'days');
    }
    return week;
  }),

  actions: {
    currentWeek() {
      this.set('selectedWeek', moment().startOf('week'));
    },
    previousWeek() {
      this.get('selectedWeek').subtract(7, 'days');
      this.notifyPropertyChange('selectedWeek');
    },
    nextWeek() {
      this.get('selectedWeek').add(7, 'days');
      this.notifyPropertyChange('selectedWeek');
    }
  }
});

关于javascript - Ember.js 每周日历导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41489636/

相关文章:

javascript - jQuery - 将处理程序传递给回调

javascript - Ember.js 新手,我可以渲染除根应用程序模板之外的所有模板

javascript - Ember 1.13,查看查找

rest - 如何强制ember-data从服务器重新加载记录的数据

java - 如何使用 Jackson 获取特定时区的日历?

javascript - 使用javascript的可拖动DIV

用于连接 URL 的 Javascript 语法

c# - 构建日历应用程序时,我应该在数据库中存储日期或重复规则吗?

java - 日历 HOUR_OF_DAY 存在问题

javascript - 在 div 中添加 css border-right