在Ember RC1中更改了Ember.TextField绑定?

时间:2013-03-09 23:12:55

标签: javascript ember.js

我正在尝试构建一个最初显示文本的视图。如果用户双击,它将用输入字段替换该文本。这样,用户可以轻松更新文本(例如使用“contenteditable”属性)。

我的方法适用于Ember pre4,但不适用于Ember RC1。在RC1中,Ember.TextField不会初始化为父视图的value属性。双击标签文本时,它会创建一个空输入字段。这是两个小提琴:

  1. Pre4(工作):http://jsfiddle.net/mattsonic/cq5yy/5
  2. RC1(相同代码 - 无效):http://jsfiddle.net/mattsonic/UUac9/15
  3. 知道Ember里面发生了什么变化吗?感谢。

    以下是代码:

    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());
    }
    });
    

1 个答案:

答案 0 :(得分: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/