2012-06-27 12 views
11

La documentación knockout.js muestra la unión como esto css:Cambio de clase CSS en knockout.js clic con el ratón sobre

<div data-bind="css: { profitWarning: currentProfit() < 0 }"> 
    Profit Information 
</div> 

necesito para adaptarla a cambiar la clase css de clic de ratón. ¿Cómo puedo hacer esto?

Sobre la base de respuestas a continuación, estoy usando un código como éste:

// CSS class to be applied 
<style> 
    .bigclass 
    { 
     width: 200px; 
    } 

</style> 

// Select list inside a jquery .tmpl 
<script id='criteriaRowTemplate' type='text/html'> 
    <tr> 
     <td> 
      <select data-bind='click: makeBig, css: {bigclass : SelectHasFocus() > 0}' /> 
     </td> 
    </tr> 
</script> 

// Knockout.js Viewmodel 
var CriteriaLine = function() { 
    this.SearchCriterion = ko.observable(); 
    this.SelectHasFocus = ko.observable(0); 

    // this method is called 
    makeBig = function(element) { 
     this.SelectHasFocus(1);    
    };   
}; 

Sin embargo, esto no se está expandiendo el ancho de la lista de selección. ¿Qué estoy haciendo mal?

+0

que se supone que tiene 'ko.applyBindings (CriteriaLine())' en algún lugar después de la carga de documentos, ¿verdad? Su código funciona como se muestra [aquí] (http://jsfiddle.net/6896T/4/). – Pakman

Respuesta

1

La manera más simple es usar un click binding que cambia un observable en la devolución de llamada. Debería enlazar la clase apropiadamente usando algo como attr binding

+0

gracias por su respuesta. Sería muy útil si puede proporcionar un código de muestra, especialmente si se trata de una lista de selección. Necesito usar la clase css para aumentar el ancho de toda la lista de selección. – Yasir

+0

He agregado un código de muestra pero no funciona. ¿Sabrías lo que está pasando mal? – Yasir

+0

Esto puede ser solo un artefacto de la preparación del código para el desbordamiento de la pila, pero makeBig es privado y no sería accesible para los enlaces. cambio makeBig = function ... to this.makeBig = function ... – daedalus28

15

Haga que su función de clic cambie una variable observable. Para example:

<div data-bind="css: { myclass: newClass() == true }"> 
    Profit Information 
</div> 

<button data-bind="click: changeClass">Change Class</button> 

<script type="text/javascript"> 
    var viewModel = { 
     newClass: ko.observable(false), 
     changeClass: function() { 
      viewModel.newClass(true); 
     } 
    }; 
</script> 

Nota: Puede combinar click y css en el mismo elemento. Por ejemplo:

<div databind="click: changeClass, css: { myclass: newClass() == true }"></div> 
+0

Gracias por la respuesta @Pakman. Intenté un código similar al tuyo, pero no funciona. He agregado el código en mi pregunta original. ¿Puedes ver lo que está pasando mal? – Yasir

1

Creo que el problema es con la etiqueta de secuencia de comandos.

Por favor, encontrar la solución en el siguiente enlace: http://jsfiddle.net/ZmU6g/3/

+2

¿Quizás pueda publicar la solución aquí además del jsfiddle para una referencia más fácil? – InSane

Cuestiones relacionadas