将名称属性添加到Ember.TextField?

时间:2012-03-27 17:10:29

标签: javascript ember.js

这是漫长的一天,这可能非常简单,但我如何将名称属性添加到Ember.TextField?

我想做这样的事情:

{view Ember.TextField valueBinding="your_name" placeholder="Your name" name="your_name"}}

这适用于占位符,但忽略了名称。

任何想法??

感谢 瑞克

4 个答案:

答案 0 :(得分:8)

默认情况下,name属性不受约束see

作为解决方法,您可以创建自己的TextField,请参阅http://jsfiddle.net/fkPzr/

App.TextField = Ember.TextField.extend({
    init: function() {
        this._super();
        // get attributeBindings and add 'name'
        var attributeBindings = this.get('attributeBindings');
        attributeBindings.pushObject('name');
        this.set('attributeBindings', attributeBindings);
    }
});

<强>更新

由于attributeBindings被声明为concatenated property *,TextField可以简化,请参阅http://jsfiddle.net/cRhcg/

App.TextField = Ember.TextField.extend({
    attributeBindings: ['name']
});

*连接属性不会覆盖扩展对象的属性,但会连接超级对象的现有值。说得通?这是一个example

答案 1 :(得分:2)

它不起作用,因为Ember.TextField没有公开这个属性绑定。

来自Ember.TextField

attributeBindings: ['type', 'value', 'size'],

加上mixin的那些:

attributeBindings: ['placeholder', 'disabled', 'maxlength'],

要绑定name属性,请创建一个自己的子类,将“name”添加到属性绑定

答案 2 :(得分:0)

这将解决您的问题。 但是,我建议不要这样做。 ember背后的想法是将这样的信息保留在DOM之外。

Ember.TextField.reopen({
  attributeBindings: ['name']
});

答案 3 :(得分:-1)

如果您想要选择指定名称属性,可以使用attributeBindings来完成。

{view Ember.TextField valueBinding="your_name" placeholder="Your name" attributeBindings="name" name="your_name"}}