2016-08-01 37 views
1

試圖尋找與形式的選擇列表中的一些例子之後,但似乎他們總是值在我的項目中使用的onchange功能 http://balinterdi.com/2015/08/29/how-to-do-a-select-dropdown-in-ember-20.html燼JS拿到形式選擇提交

不過,我想是這樣的:

<form {{action "createBook" on="submit"}}> 
    <p>{{input type='text' id='title' value=title}}</p> 
    <p> <select name="lang" id="lang"> 
     <option value="">--Choose--</option> 
     {{#each model.language as |lang|}} 
      <option value="{{lang.url}}">{{lang.title}}</option> 
     {{/each}} 
     </select> 
    </p> 
</form> 

在我的控制,我有:

actions:{ 
    createBook() { 
    var title = this.get('title'); //This line works fine 
    var lang = this.get('lang'); //This value from select isnt working at all 
    //do stuffs .. 
    }, 
} 

我能做些什麼,這樣我可以從選擇中createBook值()動作?

回答

0

可以傳遞選擇onchange中的選項值並從action中設置值處理程序,

<select onchange={{action "selectOption" value="target.value"}}> 
    <option value="">--Choose--</option> 
    {{#each model.language as |lang|}} 
    <option value="{{lang.url}}">{{lang.title}}</option> 
    {{/each}} 
{{/each}} 

操作,

actions: { 
    selectOption: function(option) { 
     this.set("lang", option); 
    } 
} 
+0

this.set(「lang」,option) - 這將設置lang.url的值,而不是整個lang對象。要獲取lang對象,this.get('model.language')。findBy('url',option) – kumkanillam

+0

完美地工作,謝謝你的支持:) – Nam

0

您可以在平變化的方法使用這樣

<select {{action 'change' on='change'}}> 
    {{#each content as |item|}} 
    <option value="{{item.id}}"> 
    {{item.name}} 
    </option> 
{{/each}} 

,並設置郎的選擇項的屬性

actions: { 
    createBook() { 
    var title = this.get('title'); //This line works fine 
    var lang = this.get('lang'); 
    console.log(lang, title); 
    }, 

    change() { 
    const selectedEl = this.$('select')[0]; 
    const selectedIndex = selectedEl.selectedIndex; 
    const selectedValue = this.get('content')[selectedIndex]; 
    this.set('lang', selectedValue.id) 
    } 
} 

請點擊這裏Twiddle

+0

我得到這個錯誤:遺漏的類型錯誤:這$不是一個函數。 – Nam

+0

你在哪裏遇到這個問題? –

+0

@Nam如果你把你的表單hbs代碼放在你不會得到的組件中,$不是函數錯誤。我猜只有組件纔會有這個。$函數。 – kumkanillam