Emberjs:从子视图中解析表单数据

时间:2013-06-22 12:15:17

标签: javascript view ember.js

我有一个OutputsFormView,它应该有按钮上的点击事件的保存和取消处理程序。单击保存按钮时,它应该从子视图中收集所有值并将其发送到控制器,然后控制器将其保留。

outputs.js

App.OutputsCreateRoute = Ember.Route.extend({
    model: function() {
        return App.Output.createRecord();
    },
    renderTemplate: function() {
        return this.render('outputs/form', {
            controller: 'outputsCreate'
        });
    }
});

App.OutputsCreateController = Ember.Controller.extend({
    save: function(model) {
        // outputs empty values for title, receiver, value
        console.log(model);
    }
});

App.OutputsFormView = Ember.View.extend({
    tagName: 'form',
    classNames: ['form', 'form-horizontal'],

    save: function(e) {
        this.get('controller').send('save', {
            title: this.get('title'),
            receiver: this.get('receiver'),
            value: this.get('value')
        });
    },
    cancel: function(e) {

        console.log('canceling');
    }
});

模板

<script type="text/x-handlebars" data-template-name="outputs/form">
  {{#view App.OutputsFormView}}
    <legend class="text-right">create a new output</legend>
    <fieldset>
      <div class="control-group">
        <label class="control-label" for="title">Title</label>
        <div class="controls">
          {{view Ember.TextField valueBinding="view.title" placeholder="Lovely Afternoon Pizza"}}
        </div> 
      </div>
      <div class="control-group">
        <label class="control-label" for="receiver">Receiver</label>
        <div class="controls">
          {{view Ember.TextField valueBinding="view.receiver" placeholder="The Goverment"}}
        </div> 
      </div>
      <div class="control-group">
        <label class="control-label" for="value">Receiver</label>
        <div class="controls">
          {{view App.ValueView valueBinding="view.value"}}
        </div> 
      </div>
      <div class="control-group pull-right">
        <div class="controls">
          <button type="button" {{action "save"}} class="btn">save</button>
          <button type="button" {{action "cancel"}} class="btn btn-red">cancel</button>
        </div>
      </div>
    </fieldset>
  {{/view}}
</script>

出于某种原因,我无法获得子表单视图的值,不幸的是我不知道我忘记了什么......

博多

1 个答案:

答案 0 :(得分:0)

解决方案是每个valueBinding在控制器中都可用:

App.OutputsCreateController = Ember.Controller.extend({
    save: function(model) {
        var output = this.get('model');

        output.set('title', this.get('title'));
        output.set('receiver', this.get('receiver'));
        output.set('value', this.get('value'));

        output.save();
    }
});

这比直接从视图中解析值更好。但是如果你想这样做,你可以给你的观点起一个名字:

{{view viewName="blabla"}}

然后通过父视图访问它:

this.get('blabla');

但我认为值绑定方法应该是首选