按下按钮时从文本字段绑定值

时间:2012-01-13 20:47:42

标签: ember.js


我有以下示例(见下文)与Ember.js一起使用,只要我在文本字段中输入内容并按回车键,一切正常。但是当我按下按钮时,我怎么能得到相同的结果呢?单击按钮时如何绑定文本字段的值?我是否有观点工作? 提前谢谢!

<script type="text/x-handlebars">
  {{view App.TextField}}
  {{#view Ember.Button target="App.peopleController" action="addPerson"}}
    Add Person
  {{/view}}
  <ul id='todo-list'>
  {{#each App.peopleController }}
    <li>{{name}}</li>
  {{/each}}
  </ul>
</script>
<script>
  App = Em.Application.create();

  App.peopleController = Em.ArrayController.create({
    content: [{name: "Tom"}, {name: "Mike"}],

    addPerson: function(name) {
      this.unshiftObject(App.Person.create({name: name}));
    }
  });

  App.Person = Em.Object.extend({
    name: null
  });       

  App.TextField = Em.TextField.extend({
    insertNewline: function() {
      App.peopleController.addPerson(this.get("value"));
      this.set("value", "");
    }
  });
</script>

2 个答案:

答案 0 :(得分:2)

这实际上有点棘手,但我在jsFiddle中重写了你的例子:http://jsfiddle.net/ebryn/vdmrA/

我建议不要在视图子类中对控制器进行硬编码引用。如果您这样做,则无法在其他地方重用这些视图组件。

答案 1 :(得分:0)

我认为在你的代码中,Ember Button只是调用addPerson函数而不给它预期的name参数。您可能必须为该按钮编写单独的视图,以便将输入字段的值传递给addPerson函数。

App.MyButton = Em.Button.extend({
  click: function(){
    var value = App.TextField.get('value')
    // etc

  }