Cant access double bound variable in a custom element

I cant figure this out. Would love someone to have a look and identify why this causes an error.

I have an address custom element that forms part of the client form. It gets its data from the client form (parent) via double bound variable. I set it like so:

@bindable({ defaultBindingMode: bindingMode.twoWay }) address = new AddressDetails;

The client gets its data from a fetch which is a promise.

This does work and if address details exist on the client they populate in the address custom element.

However if I want to set one of the members of the address to some value I get and error in that no matter where I try it cannot set the value to something that is undefined.

I have initiated it. each member is set to a textbox in the form and populates when there is data for it present in the parent (client).

However, I get the following error if I try and set say the postcode (this.address.postcode) to a value. It should be able to be assignable. Its not. It remains (for all purposes) undefined.

Here is how I tried to use it:

   this.address.addressLocation.stateShortName = this.companyStateShortName;

and here is the error:

address.ts:72 Uncaught (in promise) TypeError: Cannot set property 'stateShortName' of undefined
at address.ts:72
at <anonymous>

So I thought I might be able to find somewhere where its not undefined… I couldnt. Here is a picture of the console with a number of console.logs of this.address. One during the constructor, bind and attached all showing its undefined.

For those that would like all the details of the error in is the expanded view I have attached it below.

So why when I have initialised the variable object address cant I access it and assign anything to it??

Is this something to do with Aurelia not allowing you to access double bound variables or (more likely) I have screwed up…

address.ts:72 Uncaught (in promise) TypeError: Cannot set property 'stateShortName' of undefined
at address.ts:72
at<anonymous>
    (anonymous)	@	address.ts: 72
    Promise.then(async)
    app / components / clients / address / address.Address.getStateData	@	address.ts: 66
    Address	@	address.ts: 24
    invoke	@	aurelia-dependency - injection.js:436
    invoke	@	aurelia-dependency - injection.js:400
    invoke	@	aurelia-dependency - injection.js:671
    get	@	aurelia-templating.js:2002
    get	@	aurelia-dependency - injection.js:610
    elementContainerGet	@	aurelia-templating.js:2057
    create	@	aurelia-templating.js:4044
    applyInstructions	@	aurelia-templating.js:2159
    create	@	aurelia-templating.js:2380
    create	@	aurelia-templating.js:4056
        (anonymous)	@	router-view.js:127
    Promise.then(async)
    process	@	router-view.js:118
    _loop	@	aurelia-router.js:291
    _commitChanges	@	aurelia-router.js:305
    run	@	aurelia-router.js:143
    next	@	aurelia-router.js:112
    iterate	@	aurelia-router.js:1302
    inspect	@	aurelia-router.js:1279
        (anonymous)	@	aurelia-router.js:1295
    processPotential	@	aurelia-router.js:1413
    iterate	@	aurelia-router.js:1294
    processActivatable	@	aurelia-router.js:1305
    run	@	aurelia-router.js:1191
    next	@	aurelia-router.js:112
    iterate	@	aurelia-router.js:1221
    processDeactivatable	@	aurelia-router.js:1224
    run	@	aurelia-router.js:1179
    next	@	aurelia-router.js:112
    iterate	@	aurelia-router.js:1302
    processActivatable	@	aurelia-router.js:1305
    run	@	aurelia-router.js:1167
    next	@	aurelia-router.js:112
        (anonymous)	@	app.ts: 55
    Promise.then(async)
    app / app / app.AuthorizeStep.run	@	app.ts: 55
    next	@	aurelia-router.js:112
    Promise.then(async)
    run	@	aurelia-router.js:1443
    next	@	aurelia-router.js:112
    iterate	@	aurelia-router.js:1221
    processDeactivatable	@	aurelia-router.js:1224
    run	@	aurelia-router.js:1155
    next	@	aurelia-router.js:112
        (anonymous)	@	aurelia-router.js:584
    Promise.then(async)
    run	@	aurelia-router.js:582
    next	@	aurelia-router.js:112
    run	@	aurelia-router.js:125
        (anonymous)	@	aurelia-router.js:1773
    Promise.then(async)
    _dequeueInstruction	@	aurelia-router.js:1727
    activate	@	aurelia-router.js:1704
        (anonymous)	@	aurelia-router.js:1682
    Promise.then(async)
    registerViewPort	@	aurelia-router.js:1681
    RouterView	@	router-view.js:74
    invokeWithDynamicDependencies	@	aurelia-dependency - injection.js:425
    invoke	@	aurelia-dependency - injection.js:400
    invoke	@	aurelia-dependency - injection.js:671
    get	@	aurelia-templating.js:2002
    get	@	aurelia-dependency - injection.js:610
    elementContainerGet	@	aurelia-templating.js:2057
    create	@	aurelia-templating.js:4044
    applyInstructions	@	aurelia-templating.js:2159
    create	@	aurelia-templating.js:2380
    create	@	aurelia-templating.js:4056
        (anonymous)	@	aurelia-templating.js:4548
    Promise.then(async)
    createController	@	aurelia-templating.js:4547
    _createControllerAndSwap	@	aurelia-templating.js:4509
    compose	@	aurelia-templating.js:4595
    compose	@	aurelia-templating.js:4859
    setRoot	@	aurelia-framework.js:111
        (anonymous)	@	boot.ts: 59
    Promise.then(async)
    configure	@	boot.ts: 42
        (anonymous)	@	aurelia-bootstrapper.js:124
    Promise.then(async)
    config	@	aurelia-bootstrapper.js:119
        (anonymous)	@	aurelia-bootstrapper.js:155
    Promise.then(async)
    bootstrap	@	aurelia-bootstrapper.js:154
        (anonymous)	@	aurelia-bootstrapper.js:141
    Promise.then(async)
    run	@	aurelia-bootstrapper.js:136
        (anonymous)	@	aurelia-bootstrapper.js:161
    94	@	app.js?v = orlKrQ6pvzX…alvdD91XqhvWs: 23925
    __webpack_require__	@	bootstrap 13a3cb9…:678
    fn	@	bootstrap 13a3cb9…:88
    50	@	app.js?v = orlKrQ6pvzX…alvdD91XqhvWs: 18888
    __webpack_require__	@	bootstrap 13a3cb9…:678
    0.Object.defineProperty.value	@	bootstrap 13a3cb9…:724
        (anonymous)	@	bootstrap 13a3cb9…:724

Are you sure you didn’t mean:
@bindable({ defaultBindingMode: bindingMode.twoWay }) address = new AddressDetails();
Instead of:
@bindable({ defaultBindingMode: bindingMode.twoWay }) address = new AddressDetails;

Note the parentheses.

God I was hoping it was that simple. Alack alas its still undefined. ITs like the var thats bound (in this instance) is always undefined… its hard to pinpoint the reason for the error and therefore a solution

Take a look here: https://stackoverflow.com/questions/39866006/how-to-set-default-value-for-bindable-properties-in-aurelia-html-only-element

Stepping out but a quick look appears to indicate this might be it… will explore tomorrow… thanks for replying