2013-09-01 3 views
7

Ho una domanda riguardante il binding di stile. È possibile generare l'intero testo vincolante di stile? Quindi le proprietà e le parti di valore insieme? Per esempio:Puoi aggiungere il bind di stile knockoutjs specificando insieme il valore + della proprietà?

function ViewModel() { 
    this.fontSize = ko.observable(12); 

    this.fontSizeCSS = ko.computed(function() { 
     return "font-size: " + " " + this.fontSize() + "px"; 
    }, this); 

} 

// Activates knockout.js 
ko.applyBindings(new ViewModel()); 

Il il modo più semplice è quello di fare in questo modo:

<div data-bind="style: { fontSize: fontSize() + 'px'}"> 
    <p>Lorem ipsum</p> 
</div> 

E 'possibile farlo un modo come questo (ho provato, non ha funzionato):

<div data-bind="style: { fontSizeCSS() }"> 
    <p>Lorem ipsum</p> 
</div> 

Se sì, come? Se no, perché no? Si può fare un binding di testo con un elemento di stile html, ma mi chiedevo se è possibile farlo in qualche modo simile, cosa sto proponendo? Grazie!

+0

non si dovrebbe avere() nell'associazione sull'ultimo esempio. – deltree

+0

L'uscita dal() non risolverà il problema. – Zsombi

+0

che è corretto, ma avere il codice errato per cominciare non aiuta le cose. – deltree

risposta

12

Il parametro principale della style binding non è un string, ma

Si dovrebbe passare un JavaScript oggetto in cui i nomi delle proprietà corrispondono ai nomi di stile, ed i valori corrispondono ai valori di stile che si desidera applicare.

Così il vostro fontSizeCSS calcolato dovrebbe restituire un oggetto e non una stringa, e funzionerà bene:

this.fontSizeCSS = ko.computed(function() { 
     return {"fontSize": this.fontSize() + "px"}; 
}, this); 

Demo JSFiddle.

+0

ben fatto, ho assolutamente perso il – deltree

+0

Grazie! Funziona in questo modo, l'unico problema è che devo mettere fontSize invece di font-size. Potresti correggerlo nella tua risposta? – Zsombi

+0

@Zsombi quale browser stai usando? Perché sta funzionando bene nella mia demo sia in IE10 e l'ultimo Chrome ... – nemesv