2016-03-29 8 views
0

マイclick-editableコンポーネントのように:コントローラまたはルートのコンポーネント値をemberでどのように更新できますか?

テンプレート:

{{#if isEdit}} 
    <div class="input-group"> 
    {{input type="text" value=editValue class="form-control"}} 
    <div class="input-group-btn"> 
     <button type="button" class="btn no-margin-btn btn-info" {{action "updateValue"}}>{{fa-icon 'check'}}</button> 
    </div> 
    </div> 
{{else}} 
    .... 
{{/if}} 

そして:私のテンプレートで

export default Ember.Component.extend({ 
    tagName: "", 
    isEdit: false, 
    canEdit: true, 
    category: 'input', 
    editValue: Ember.computed.oneWay('value'), 

    actions:{ 
    updateValue() { 
     this.sendAction('onUpdate', this.get('valueModel'), this.get('valueColumn'), this.get('editValue'), this.get('isEdit')); 
    } 
    } 
}); 

用途:コントローラで

{{#each model.quotationWorkItems as |quotationWorkItem index|}} 
    {{click-editable valueModel=quotationWorkItem valueColumn='name' value=quotationWorkItem.name onUpdate=(action "updateInput")}} 
{{/each}} 

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    .... 

    actions: { 
    updateInput(updateModel, updateColumn, value, isEdit) { 
     updateModel.set(updateColumn, value); 
     updateModel.save().then(()=> { 
     this.get('model').reload(); 
     this.set('isEdit', false); 
     },()=> { 
     alert('wrong'); 
     }); 
    } 
    } 
}) 

経路:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    ... 

    model(params) { 
    return this.store.find('quotation', params.quotation_id); 
    }, 

    setupController(controller, model) { 
    controller.set('model', model); 
    ... 
    } 
}) 

見積モデル:

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    quotationStocks: DS.hasMany('quotationStock'), 
    quotationWorkItems: DS.hasMany('quotationWorkItem'), 
    ... 
}); 

QuotationWorkItemモデル:

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    transactionType: DS.belongsTo('transactionType'), 
    quotation: DS.belongsTo('quotation'), 

    ... 
}); 

このコードは、モデル値を更新することができるが、問題isEditは成分値です。 isEditがコントローラに送信され、別の値を設定しても機能しません。だから私はemberコントローラのコンポーネントの値を変更できないと思いますか?

this.set('isEdit', false); 

コードはコントローラでは機能しません。私はEmber 2.4.0を使用しています。

+0

'model.quotationWorkItems'のクラスのコードを追加してください。 – Timm

+0

@ティムもちろん。しかし、問題との接触はありません。 – JeskTop

答えて

0

コントローラのisEditプロパティをコンポーネントのisEditプロパティにバインドする必要があります。

{{click-editable isEdit=isEdit valueModel=quotationWorkItem valueColumn='name' value=quotationWorkItem.name onUpdate=(action "updateInput")}} 

これは、コンポーネント内のisEditプロパティ(データダウン)を上書きします。

+0

私の質問を編集します。私は 'isEdit = isEdit'を使うと、コンポーネントを追加しなければならないと思います。 – JeskTop

関連する問題