如何观察Ember中的值

时间:2017-03-15 00:24:48

标签: javascript ember.js

我正在尝试制作我的第一个Ember应用程序,我正在努力解决Ember.set()错误。

我的nextMonth函数工作正常并且渲染正常但是如果我添加{{month}} 在我看来,我收到了一个错误。

查看:

<h2>{{month}}</h2>
<button {{action "nextMonth"}}>Next</button>
{{#increment-for times=days }}

{{/increment-for}}

控制器:

import Ember from 'ember';

export default Ember.Controller.extend({

month: new Date().getMonth() + 1,
year: new Date().getFullYear(),

getDays: function(year, month){
  const date = new Date(year, month, 0).getDate();
  this.set('days', date);
},

init: function() {
 this.getDays(this.month, this.year);
},

actions:{
  nextMonth: function(){
    if(this.month !== 12){
      this.set('month', this.month++);
    }
    else if(this.month === 12){
      this.set('month', 1);
      this.set('year', this.year++);
    }
    this.getDays(this.year, this.month);
 }
}
});

2 个答案:

答案 0 :(得分:0)

始终使用get method获取属性值,set method仅设置属性值,然后触发Embuted属性,如ComputedProperty和Observer,模板值将为修改后改变了。

与评论中建议一样,使用插件ember-moment,您可以使用ember install ember-moment命令进行安装。您将获得许多帮助器来使用它的模板及其moment.js popular library的包装器,这样您只需执行import moment from 'moment';

就可以在js代码中使用此库中的所有可用方法

关于您的代码,您可以在month方法本身中初始化year init。当您使用this._super(...arguments)时,请不要使用Ember.Object来拨打超级电话。

答案 1 :(得分:-2)

问题是使用++增加了。将它改为this.month + 1之后就可以了。