只有当元素具有特定的css类时,我才可以数据绑定元素的宽度吗?

问题描述:

我想将div元素的宽度绑定到viewModel的属性上,但只有当div有特定的css类时才可以。只有当元素具有特定的css类时,我才可以数据绑定元素的宽度吗?

因此,像这样:

<div data-bind="style: {width : $element.hasClass('dynamicWidth') ? getWidth : ''}">

任何人都知道,如果有一种方法可以做到这一点?

您可以对此使用自定义绑定。下面是简单的例子:

ko.bindingHandlers.widthEx = { 
    update: function(element, valueAccessor) { 
     var options = valueAccessor(); 
     var property = ko.utils.unwrapObservable(options.property); 
     var className = options.class; 

     if($(element).hasClass(className)){ 
      $(element).width(property); 
     } 
    } 
}; 

var vm = { width: ko.observable(100)}; 
ko.applyBindings(vm); 

<div data-bind="widthEx: {property: width, class: 'Test'}"> 

这里是工作提琴:http://jsfiddle.net/wRyAg/2/