2016-04-26 5 views
0

AnsichtAurelia verwenden, wie ein Standardwert für eine benutzerdefinierte Attribut

<template> 
    <div single-value-attrib="${color}"></div> 
    <div single-value-attrib.bind="color"></div> 
    <input type="text" value.bind="color" /> 
</template> 

view-Modell

export class SingleValueAttribCustomAttribute { 
    static inject = [Element]; 
    color = 'orange'; 
    constructor(element) { 

    this.element = element; 
    this.element.style.width = this.element.style.height = '100px'; 
    } 

    bind() { 
    this.element.style.backgroundColor = this.value; 
    } 

    valueChanged(newValue, oldValue) { 
    this.element.style.backgroundColor = newValue; 
    } 
} 

Ich erwarte einzustellen, dass color='orange'; im Ansichtsmodell zu Farbe so auf der Karte ansehen würde Einstellen der Standardfarbe als Orange. Das Ändern der Farbe in dem Eingabefeld funktioniert wie erwartet. Ich weiß, dass Sie this.value zu einer Farbe als Ihre Standardfarbe nur einstellen können, aber ich dachte gerade, dass die Bindung die gleiche Weise wie im skeleton-nav arbeiten würde, wo die Eingabefelder Standardwerte für firstName und lastName

haben

Antwort

1

Beachten Sie zuerst das this.color wird nirgendwo im Code ViewModel verwendet, so dass das Setzen von Code wirklich nichts im Code tut, wie er existiert.

Nach etwas herumspielen, habe ich festgestellt, dass Ihre beste Wette in dieser spezifischen Situation sein wird, die Hintergrundfarbe im Konstruktor zu setzen und die bind Funktion loszuwerden. Ich habe eine gist.run schaffen hier: https://gist.run/?id=a15e0305f082f6ef080364caff2a1ec1

Hier die VM für das benutzerdefinierte Attribut ist:

export class SingleValueAttribCustomAttribute { 
    static inject = [Element]; 
    defaultColor = 'orange'; 
    constructor(element) { 

    this.element = element; 
    this.element.style.width = this.element.style.height = '100px'; 
    this.element.style.backgroundColor = this.defaultColor; 
    } 

    valueChanged(color) { 
    if(color.trim() !== '') { 
     this.element.style.backgroundColor = color; 
    } 
    } 
} 

Sie können die die Prüfung für leere Zeichenfolge auf color in valueChanged, abhängig von Ihrem entfernen möchten Anwendungsfall.

+0

Das Ändern der Farbe auf Wert = 'Orange' funktioniert nicht. Das Setzen von this.value = 'orange' im Konstruktor funktioniert ebenfalls nicht, aber es ist sinnvoll, dass es so ist. Wenn ich dies ändere.Wähle my.value und setze dies.myvalue = 'orange', dann funktioniert es. – dan

+0

Wissen Sie was? Du hast Recht. Ich werde die Antwort aktualisieren, um korrekt zu sein. :-) –

+0

funktioniert perfekt, danke – dan