javascript - Aurelia Two-Way Binding not working properly -


i trying two-way bind in aurelia , can't seem able make work properly.

so have create.html has selectedtimezone.two-way="timezone". trying display fact working , binding doing <div if.bind="timezone">main: ${timezone}</div>. never works , value timezone never bound.

in time-zone-picker.html seem work there. have <div if.bind="selectedtimezone">this working! ->${selectedtimezone}</div> working properly.

example

main template (create.html):

<template>     <require from="../shared/components/time-zone-picker"></require>     <time-zone-picker selectedtimezone.two-way="timezone"></time-zone-picker>     <div if.bind="timezone">main: ${timezone}</div> </template> 

time-zone-picker.html:

<template bindable="selectedtimezone">     <select class="c-select" value.bind="selectedtimezone">         <option>select time zone</option>         <option repeat.for="tz of timezones" model.bind="tz">${tz.text}</option>      </select>      <div if.bind="selectedtimezone">this working! ->${selectedtimezone}</div> </template> 

time-zone-picker.js:

import timezones 'timezones.json';  export class timezonepicker {   constructor() {     this.timezones = timezones;   } } 

edit

adding code below match response below. still unable make work changes below:

time-zone-picker.js

import { bindable, bindingmode } 'aurelia-framework'; import timezones 'timezones.json';  export class timezonepicker {   @bindable({ defaultbindingmode: bindingmode.twoway }) selectedtimezone;   constructor() {     this.timezones = timezones;   } } 

time-zone-picker.html

<template>   <select class="c-select" value.bind="selectedtimezone">     <option>select time zone</option>     <option repeat.for="tz of timezones" model.bind="tz">${tz.text}</option>   </select>   <div if.bind="selectedtimezone">${selectedtimezone}</div> </template> 

create.html

<template>     <require from="../shared/components/time-zone-picker"></require>     <time-zone-picker selectedtimezone.two-way="timezone"></time-zone-picker>     <div if.bind="timezone">main ${timezone}</div> </template> 

you should use <template bindable="..."> html-only custom elements. in case, should this:

time-zone-picker.html

<template> <-- remove bindable here -->     <select class="c-select" value.bind="selectedtimezone">         <option>select time zone</option>         <option repeat.for="tz of timezones" model.bind="tz">${tz.text}</option>      </select>      <div if.bind="selectedtimezone">this working! ->${selectedtimezone}</div> </template> 

time-zone-picker.js:

import {bindable} 'aurelia-templating'; // or framework import {bindingmode} 'aurelia-binding'; // or framework import timezones 'timezones.json';  export class timezonepicker {    @bindable({ defaultbindingmode: bindingmode.twoway }) selectedtimezone;   constructor() {     this.timezones = timezones;   } } 

create.html

<template>     <require from="../shared/components/time-zone-picker"></require>     <time-zone-picker selected-time-zone.two-way="timezone"></time-zone-picker>     <div if.bind="timezone">main: ${timezone}</div> </template>