2016-12-02 3 views

답변

2

바인딩 시스템에는 input + datalist에 대한 특별한 논리가 없습니다. 그것은 input.delegate 바인딩에 쉽게 추가 할 수 있습니다 :

https://gist.run/?id=dc040a0087aa8a99a5f2dc0fc721dca3

app.html

<template> 
    <input type="text" list="myDatalist" input.delegate="selectedValue = findOption($event.target.value)" /> 
    <datalist id="myDatalist"> 
    <option repeat.for="option of options">${option.name}</option> 
    </datalist> 

    <pre style="margin-top: 100px"><code>${selectedValue}</code></pre> 
</template> 

export class App { 
    selectedValue = null; 
    options = [ { id: 1, name: 'one' }, { id: 2, name: 'two' } ]; 
    findOption = value => this.options.find(x => x.name === value); 
} 

사용자가 무엇을 입력 무료입니다 app.js 그들은 원하는 내용, 심지어는 제안과 일치하지 않는 datalist 그래서 그것을 계획해야합니다.

+0

고맙습니다. 제레미. 하지만 한 가지만 보여주고 모델을 다른 모델과 바인딩 할 수있는 방법은 없습니다. 우리가 구축하고있는 응용 프로그램에서 문제의 'name'속성은 때로는 커질 수 있으므로 이름을 일치시켜 검색하는 것을 피하고 싶습니다 ... 데이터 목록이 사용하기에 적절한 요소가 아닐 수도 있습니다. , 우리의 경우 ... –

+0

예에서'selectedValue'는 객체 (옵션 중 하나)가 할당됩니다. 입력 값 (문자열)을 특정 옵션 객체에 매핑하는 메커니즘을 찾아야합니다. 내 예제에서 일치하는 이름을 가진 옵션을 찾은 함수를 만들었습니다. 내가 아는이 방법은 없어. datalist 요소는 이벤트를 발생시키지 않으며 입력 요소의 입력/변경 이벤트는 데이터 목록 옵션이 선택되었을 때 표준 데이터 입력과 비교하여 알려주지 않습니다. –

+0

감사합니다. –