Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 您能让一个Ember.TextField等待更改以更新其值绑定吗?_Javascript_Date_Ember.js - Fatal编程技术网

Javascript 您能让一个Ember.TextField等待更改以更新其值绑定吗?

Javascript 您能让一个Ember.TextField等待更改以更新其值绑定吗?,javascript,date,ember.js,Javascript,Date,Ember.js,我扩展了Ember.TextField以包含日期选择器。观察文本字段的值的函数尝试解析文本字段中的字符串并更新日期属性。当您使用日期选择器时,这一切都很好,但是如果您试图在框中键入日期,它会变得疯狂,因为值会在每次按下键时更新(或按下键或任何Ember的默认事件来更新文本字段)的值绑定,它会立即用刚刚解析的日期字符串重新更新文本字段的值。例如: 输入显示10/26/2014 在2014之后插入光标并单击backspace 值已更改,因此处理程序将解析10/26/201并更新日期属性 date属性

我扩展了
Ember.TextField
以包含日期选择器。观察文本字段的
值的函数尝试解析文本字段中的字符串并更新日期属性。当您使用日期选择器时,这一切都很好,但是如果您试图在框中键入日期,它会变得疯狂,因为
会在每次按下键时更新(或按下键或任何Ember的默认事件来更新
文本字段
)的值绑定,它会立即用刚刚解析的日期字符串重新更新文本字段的值。例如:

  • 输入显示
    10/26/2014
  • 2014
    之后插入光标并单击backspace
  • 已更改,因此处理程序将解析
    10/26/201
    并更新
    日期
    属性
  • date
    属性已更改,因此处理程序将日期格式化为
    MM/d/yyyy
    ,并设置
  • 现在输入显示
    10/26/0201
  • 如果我能在输入的
    change
    事件触发时告诉Ember更新
    绑定,而不是每次击键时都尝试更新所有内容,那么我的所有问题都将得到解决,而不是改变这些处理程序的工作方式。我知道这可以在AngularJS和Knockout中完成,但我在Ember中找不到任何相关内容

    编辑


    我知道我可以改变代码的工作方式来避免这个特定的问题。在这一点上,我更感兴趣的是为了启发,在一个是或否的答案,特别是解决这个问题,这是这篇文章的标题。我开始认为答案是否定的,但我想对社区进行民意调查。

    我写了一篇博客文章,可能会提供一些解决方案,这里是文章中的一个例子。

    编写您自己的文本字段组件扩展,并添加
    更改
    回调

    App.DateTextComponent = Em.TextField.extend({
      change: function(event){
        var value = this.get('value');
        // massage data
        value += "foo";
        this.set('value', value);
      }
    });
    
    例如:

    如果您真的想在值发生变化后得到调用,请不要观察值,而是使用操作

    App.DateTextComponent = Em.TextField.extend({
      change: function(event){
        var value = this.get('value');
        this.sendAction('changed', value);
      }
    });
    
    {{date-text value=foo changed='fooChanged'}}
    

    示例:

    这并没有回答我的问题—我知道如何侦听更改事件,但这并不阻止绑定更新每次击键。它与
    .observes('value')
    函数何时启动没有任何关系。Ember是关于可重用性的,与其让外部的东西来修复日期字段,不如定义一个专门的组件来修复它,然后可以反复使用它。(示例更新)我刚刚看到了您的更新,不,您不能使用默认文本字段,如果您愿意,您可以编写自己的实现来实现。虽然这并没有回答我的理论问题(我开始认为答案只是“否”),但它有助于解决我在本例中遇到的问题。谢谢,还有+1。