开发者问题收集

如何在 Meteor Blaze 中使用 js 日期选择器

2016-10-27
115

我想在我的 Metrace 应用中使用此数据选择器 https://github.com/richsilv/Pikaday/

单击我的输入字段后,它应该显示此数据选择器。它只工作一次,之后我收到错误,我相信这是一个无限循环:

Uncaught RangeError: Maximum call stack size exceeded.

和大量来自的 console.log 消息:

 console.log(this.getMoment().format('YYYY-MM-DD'));

我做错了什么,如何正确使用这个数据选择器?

html

{{#each showDates}}
 <li>
  <input class="datapicker" type="text" value={{date}} id="data{{_id}}" />
 </li>
{{each}}

js

'click .datapicker': function(e) {          
    $(document).ready(function() {
        var picker = new Pikaday({
            field: document.getElementById(e.target.id),
            format: 'YYYY-MM-DD',
            onSelect: function() {
                console.log(this.getMoment().format('YYYY-MM-DD'));
            }
        });
    });
},

编辑:也许是一个重要的信息:我需要在输入字段中单击两次才能看到这个数据选择器。然后,由于这个错误/无限循环,我必须终止我的浏览器进程或重新启动我的流星。

2个回答

我认为你没有定位正确的 ID,难道不应该是这个:

field: document.getElementById(e.target.id),

是这个吗?

field: document.getElementById(`data${e.target.id}`),
Flávio Carvalho
2016-10-27

Template.templateName.onRendered(function{
    //fires when the template is rendered
    //initialize whatever here. here is a pickadate example

    $('.elementClass').pickadate({
        selectMonths: true,
        selectYears: true,
        min: new Date(),
        closeOnSelect: true,
        onSet: function(context) {
             var selected = moment(context.select).format('YYYY-MM-DD'));
            //do something with selected
        },
        onClose: function() {
            //BONUS: this will prevent a bug/issue 
            //when you go to another tab or page and come back 
            //it fires the pickadate that was closed again.
            //this might be a bug in materializeCSS only
            $(document.activeElement).blur(); 
        }
    });
});
中启动选择器(或其他需要初始化的内容)
Luna
2016-10-27