2013-06-22 12 views
0

我有一個OutputsFormView應該有一個保存和取消處理按鈕上的點擊事件。當點擊保存按鈕時,它應該收集來自子視圖的所有值並將其發送給控制器,然後持續它。Emberjs:從子視圖解析表單數據

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> 

出於某種原因,我不能得到的子窗體的觀點的價值和不幸的是我不知道我已經忘記了。 ..

Bodo

回答

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'); 

但是我覺得值綁定方法應該是首選