2014-10-26 59 views
1

我擴展了Ember.TextField以包含日期選擇器。觀察文本字段value的函數嘗試解析文本字段中的字符串並更新日期屬性。當你使用日期選擇器時,這很好,但是如果你試圖在框中輸入日期,它會變得瘋狂,因爲value在每個keydown(或者keyup或者Ember的默認事件更新值綁定爲TextField),並立即重新更新文本字段的值,並使用剛剛分析的格式良好的日期字符串。例如:你可以讓Ember.TextField等到更新它的值綁定嗎?

  1. 輸入說10/26/2014
  2. 您將光標插入2014後,打回退
  3. value已經改變,所以一個句柄分析10/26/201並更新date財產
  4. date屬性發生變化,因此處理程序將日期格式設置爲MM/d/yyyy並設置value
  5. 輸入現在說10/26/0201

而不是改變這些處理程序的工作方式,我的所有問題將得到解決,如果我可以告訴灰燼更新value綁定時輸入的change事件觸發,而不是試圖更新每個按鍵的一切。我知道這可以在AngularJS和Knockout中完成,但我無法找到有關Ember的任何信息。

編輯

我知道我可以改變我的代碼工作,以避免這一特定問題的方式。在這一點上,我更感興趣的是爲啓發的目的,在一個肯定或否定的答案,具體解決這個職位的標題這個問題。我開始認爲答案是否定的,但是想要調查社區。

回答

2

我寫了一篇博客文章,可能會提供一些關於Date Pickers And Validation In Ember的解決方案,下面是來自帖子的JSBins之一。

+0

雖然這並沒有回答我的理論問題(我開始想,答案就是「否」),它有助於我在這種情況下的問題。謝謝,+1。 – Andrew 2014-10-27 00:24:14

1

編寫您自己的文本字段組件的擴展並添加change回調。

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

例子:http://emberjs.jsbin.com/suzami/2/edit

如果你真的想要得到一個呼叫時的值發生變化的事實後,不遵守的價值,使用的行爲。

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

{{date-text value=foo changed='fooChanged'}} 

例子:http://emberjs.jsbin.com/suzami/3/edit?html,js,output

+0

這不回答我的問題 - 我知道如何偵聽更改事件,但這並不妨礙綁定更新每個擊鍵。它對'.observe('value')'的函數何時觸發沒有任何影響。 – Andrew 2014-10-27 00:21:02

+0

Ember完全是關於可重用性的,而不是有一些外部的東西修復你的日期字段,定義一個專門的組件來修復它,你可以重複使用它。(示例更新) – Kingpin2k 2014-10-27 01:55:21

+1

我剛看到你的更新,不,你不能使用默認的文本字段,你可以編寫你自己的實現,如果你願意的話。 – Kingpin2k 2014-10-27 02:01:45

相關問題