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

Posted

技术标签:

【中文标题】Emberjs:从子视图中解析表单数据【英文标题】:Emberjs: Resolve form data from child views 【发布时间】:2013-06-22 12:15:17 【问题描述】:

我有一个 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】:

解决办法是在控制器中每一个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');

不过我觉得应该首选值绑定方式

【讨论】:

以上是关于Emberjs:从子视图中解析表单数据的主要内容,如果未能解决你的问题,请参考以下文章

在 emberjs 中重新渲染视图

emberjs中渲染和视图关键字的区别?

我可以在 emberjs 中给视图显示动画吗

EmberJS 从控制器加载视图而不是路由

渲染多个 EmberJS 视图时断言失败

EmberJS View - 检测是不是所有子视图都已呈现