2011-06-15 1 views
5

J'ai du mal à faire fonctionner la reliure de style dans KnockoutJS.Comment utiliser les liaisons de données de style?

<script id="avatarTemplate" type="text/x-jquery-tmpl"> 
    <div id="avatar_${id}" class="avatar" data-bind="style: 
    { background: s, width: '50px', height: '85px', left: (x + 'px'), top: 
    (y + 'px') }">${s}, ${x}, ${y}</div> 
</script> 

<div data-bind="template: { name: 'avatarTemplate', foreach: avatars }"></div> 

Le résultat de rendre ce modèle est:

<div id="avatar_1" class="avatar" style="width: 50px; height: 85px;">avatar.png, 0, 0</div> 

Quelqu'un peut-il me aider à comprendre pourquoi tous les styles qui dépendent du modèle de vue ne se présentent pas?

Répondre

18

Si x et y sont observables, alors vous devez spécifier comme ceci:

<div id="avatar_${id}" class="avatar" data-bind="style: 
    { background: s, width: '50px', height: '85px', left: (x() + 'px'), top: 
    (y() + 'px') }">${s}, ${x}, ${y}</div> 

Si vous utilisez une observable dans une expression, il doit être spécifié avec(), comme il a gagné » t être déballé automatiquement.

http://jsfiddle.net/rniemeyer/6GtV3/

+3

Ahh, je me demandais comment faire KnockoutJS concaténation .. merci: o) – Andrew

+1

Mon Dieu! Je viens de passer 30 minutes à essayer de comprendre cela! = D –

+0

Merci. Économiser mon temps aussi –

0

Ce n'est pas une réponse directe mais je googlé sur cette page en enquêtant sur. J'ai eu quelque chose comme ceci:

<div data-bind="style: { backgroundImage: src }"> 

src est une valeur dans mon modèle d'objet comme « http://image.com/foo.jpg ». Spécification src en fonction que dans la réponse ci-dessus n'a pas aidé:

<div data-bind="style: { backgroundImage: src() }"> 

Je trouve que si la valeur src est pas une propriété background-image valide, il est complètement ignoré.

je devais utiliser:

<div data-bind="style: { backgroundImage: 'url(\'' + src() + '\'' }"> 

pourrait sauver quelqu'un une certaine douleur à un moment donné :)

Questions connexes