2012-06-27 84 views
11

Các tài liệu knockout.js cho thấy css ràng buộc như thế này:Thay đổi lớp css trong knockout.js trên chuột nhấp

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

tôi cần phải thích nghi với nó để thay đổi lớp css trên mouseclick. Tôi có thể làm cái này như thế nào?

Dựa trên câu trả lời dưới đây, tôi đang sử dụng một số mã như thế này:

// 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);    
    };   
}; 

Tuy nhiên, đây không phải mở rộng độ rộng của danh sách lựa chọn. Tôi đang làm gì sai?

+0

Tôi giả sử bạn có 'ko.applyBindings (CriteriaLine())' đâu đó sau khi tải tài liệu của bạn, phải không? Mã của bạn hoạt động như được hiển thị [ở đây] (http://jsfiddle.net/6896T/4/). – Pakman

Trả lời

1

Cách đơn giản nhất là sử dụng số click binding để thay đổi có thể quan sát được trong hàm gọi lại. Bạn sẽ ràng buộc lớp học một cách thích hợp bằng cách sử dụng một cái gì đó giống như attr binding

+0

cảm ơn câu trả lời của bạn. Tôi sẽ có nghĩa vụ cao nếu bạn có thể cung cấp mã mẫu, đặc biệt nếu nó liên quan đến một danh sách lựa chọn. Tôi cần phải sử dụng lớp css để tăng chiều rộng của toàn bộ danh sách lựa chọn. – Yasir

+0

Tôi đã thêm một số mã mẫu nhưng nó không hoạt động. Bạn có biết chuyện gì xảy ra không? – Yasir

+0

Điều này có thể chỉ là một tạo phẩm chuẩn bị mã cho ngăn xếp tràn, nhưng makeBig là riêng tư và sẽ không thể truy cập được bằng các ràng buộc. thay đổi makeBig = function ... to this.makeBig = function ... – daedalus28

15

Chức năng nhấp của bạn thay đổi một biến quan sát được. Đối với 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> 

Lưu ý: Bạn có thể kết hợp clickcss trên cùng một nguyên tố. Ví dụ:

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

Cảm ơn bạn đã trả lời @Pakman. Tôi đã thử mã tương tự như của bạn nhưng nó không hoạt động. Tôi đã thêm mã trong câu hỏi ban đầu của mình. Bạn có thể thấy những gì đang xảy ra không. – Yasir

1

Tôi cảm thấy vấn đề là với thẻ tập lệnh.

Hãy tìm ra giải pháp trong liên kết sau đây: http://jsfiddle.net/ZmU6g/3/

+2

Có lẽ bạn có thể đăng giải pháp ở đây ngoài jsfiddle để dễ tham khảo? – InSane

Các vấn đề liên quan