2013-03-09 44 views
1

我試圖建立一個視圖,最初將顯示文本。如果用戶雙擊,它將用輸入字段替換該文本。這樣用戶可以輕鬆更新文本(如使用「contenteditable」屬性)。Ember RC1中的Ember.TextField綁定已更改?

我有一種方法可以在Ember pre4中使用,但不能在Ember RC1中使用。在RC1中,Ember.TextField不會初始化爲父視圖的value屬性。當您雙擊標籤文本時,它會創建一個空的輸入字段。這裏有兩個小提琴:

  1. PRE4(工作):http://jsfiddle.net/mattsonic/cq5yy/5
  2. RC1(相同的代碼 - 不工作):http://jsfiddle.net/mattsonic/UUac9/15

任何想法裏面灰燼哪些改變呢?謝謝。

下面是代碼:

App.InputView = Ember.TextField.extend({ 
classNames: ["input-small"], 
valueBinding: "parentView.value", 
didInsertElement: function() { 
    this.$().focus() 
}, 
focusOut: function() { 
    parent = this.get("parentView"); 
    parent.setLabelView(); 
} 
}); 

App.LabelView = Ember.View.extend({ 
tagName: "span", 
template: Ember.Handlebars.compile("{{view.value}}"), 
valueBinding: "parentView.value", 
doubleClick: function() { 
    parent = this.get("parentView"); 
    parent.setInputView(); 
} 
}); 

App.LabelEditView = Ember.ContainerView.extend({ 
tagName: "span", 
labelView: App.LabelView.extend(), 
inputView: App.InputView.extend(), 
didInsertElement: function() { 
    this.setLabelView(); 
}, 
setInputView: function() { 
    this.set("currentView", this.get("inputView").create()); 
}, 
setLabelView: function() { 
    this.set("currentView", this.get("labelView").create()); 
} 
}); 

回答

0

我發現,我不喜歡在所有的解決方案。但是,它解決了所述的問題。

focusIn: function() { 
    var val = this.get("parentView.value"); 
    this.set("value", ""); 
    this.set("value", val); 
}, 

如果在focusIn事件期間將輸入字段的值設置爲正確的值,它仍然會失敗。但是,如果您將輸入字段的值設置爲不同的值並將其切換回來,則輸入字段將顯示爲正確的值。

我很想知道更好的方法來解決這個問題。 Ember pre4解決方案比這更優雅。

工作小提琴:http://jsfiddle.net/mattsonic/UUac9/19/