2014-05-13 16 views
0

docTemplateID라는 변수/동작이 있습니다. 이 새로운 값을 선택 어떤 버튼Emberjs - 변수의 값을 변경하는 동작이 필요합니다.

<form {{action "addDoc" on="submit"}} id="addDoc" name="addDoc"> 
    <div> 
    <button value="1"> 1 </button> //sets docTemplateID to 1 
    <button value="2"> 2 </button> //sets docTemplateID to 2 
    </div> 
    <button type="submit" class="submit"> Add</button> //Submits docTemplateID after it is chosen. 
</form> 

버튼의을 제출을의와 docTemplateID는 docTemplateID의 인스턴스를 생성합니다 제출 버튼을 클릭하면 1 또는 2 중 클릭 버튼 1 개 세트 docTemplateID = 1 의 값을 가질 수있다.

VpcYeoman.Doc = DS.Model.extend({ 
    docTemplateID: DS.attr('number'), //this is what can be set to a value of 1 or 2 
}); 

'addDoc'동작은 아래에 정의되어 있습니다.

VpcYeoman.DocsController = Ember.ArrayController.extend({ 
    actions: { 
    addDoc: function (params) { 
     var docTemplateID = this.get('docTemplateID'); 
     var store = this.store; 
     var current_object = this; 
     var doc = current_object.store.createRecord('doc', { 
     docTemplateID:docTemplateID 
     }); 
     doc.save(); 
     return true; 
    }, 

    } 
}); 

그리고 문서 루트

VpcYeoman.DocsRoute = Ember.Route.extend(VpcYeoman.Authenticated,{ 
    model: function() { 
     return this.store.find('doc'); 
    } 
}); 

답변

1

내가 볼 수없는 경로, 뭔가가되지 않는 문제가 하나, 당신은에 어떤 조치를 호출하지 않는 것을처럼, 그것은 본다 클릭 할 때 docId를 설정하는 버튼. 문제 # 2는 귀하의 컨트롤러가 아직 docTemplateId이라는 속성을 가지고 있지 않다는 것입니다. 컨트롤러가 모델의 속성을 사용하려면 해당 모델의 인스턴스를 전달해야합니다. DocRoutecreateRecord을 모델로 전달하면 값을 수정할 수 있습니다.

다음은 내가 백엔드가 없으므로 레코드를 저장할 때까지 예제 작업을하기 위해 사용한 코드입니다.

jsbin는 here

App = Ember.Application.create(); 

App.ApplicationAdatper = DS.FixtureAdapter.extend({}); 

App.Router.map(function() { 
    // put your routes here 
}); 

App.IndexRoute = Ember.Route.extend({ 

}); 

App.IndexController = Ember.ArrayController.extend({ 
    tempDocId: null, 
    actions: { 
    addDoc: function (params) { 
     console.log(this.get('tempDocId')); 
     var docTemplateID = this.get('tempDocId'); 
     var store = this.store; 
     var current_object = this; 
     var doc = current_object.store.createRecord('doc', { 
     docTemplateID:docTemplateID 
     }); 
     doc.save(); 
     return true; 
    }, 
    setDocId: function (param) { 
     this.set('tempDocId', param); 
     console.log(this.get('tempDocId')) 
    } 
    } 
}); 

App.Doc = DS.Model.extend({ 
    docTemplateID: DS.attr('number') 
}); 

그리고 템플릿을 위치 :

<script type="text/x-handlebars" data-template-name="index"> 
    <form {{action "addDoc" on="submit"}} id="addDoc" name="addDoc"> 
     <div> 
     <button value="1" {{action 'setDocId' 1}}> 1 </button> 
     <button value="2" {{action 'setDocId' 2}}> 2 </button> 
     </div> 
     <button type="submit" class="submit"> Add</button> 
    </form> 
</script> 

난이 도움이되기를 바랍니다!

+0

OP에 경로를 추가했습니다. 이 솔루션은 작동했습니다 :). 기본값을 1로 설정하려면 인덱스 컨트롤러에 tempDocId : 1을 설정하면됩니까? docTemplateID는 로컬 저장소에만 저장되지만 다른 게시물에는 문제가 있습니다. –

+1

예. 기본값이되도록하려면 tempDocId를 1로 초기화하십시오. – bmeyers

관련 문제