2013-10-23 64 views
2
ko.bindingHandlers.below = { 
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 

     var valuex = valueAccessor(), allBindings = allBindingsAccessor(); 

     var th = $(element).closest('tbody').prev('thead').find('> tr > th').eq(index); 
     if (th.attr("class") == valuex) { 
     $(element).innerHTML = viewModel.value; 
     } 
    } 
    }; 

選擇器不工作的自定義綁定。挖空 - jquery選擇器不工作裏面自定義綁定

我也試過$(element).parent(),它返回相同的元素。 爲什麼?

See fiddle here

+0

你的意思是在不工作?你如何使用下面的綁定?你可以創建一個JSFiddle來演示你的問題> – nemesv

+0

按預期工作http://jsfiddle.net/pw9bv/ – Ilya

回答

1

在看到你的小提琴之後,我嘗試了一個不涉及jQuery的解決方案,使用Knockout將該JavaScript對象映射到HTML表格。

http://jsfiddle.net/EfrainReyes/r6Vke/1/

HTML:

<table> 
<thead> 
    <tr> 
     <th>Caracteristicas</th> 
     <!-- ko foreach: planNames --> 
     <th data-bind="text: $data"></th> 
     <!-- /ko --> 
    </tr> 
</thead> 
<tbody data-bind="foreach: caracteristicas"> 
    <tr> 
     <td data-bind="text: $data"></td> 
     <!-- ko foreach: { data: $root.rows($data) } --> 
     <td data-bind="text: $data ? $data : '...'"> 

     </td> 
     <!-- /ko --> 
    </tr> 
</tbody> 
</table> 

JS:

viewModel.planNames = ko.computed(function() { 
    return ko.utils.arrayMap(this.plans(), function (plan) { 
     return plan.PlanName(); 
    }); 
}, viewModel); 

viewModel.caracteristicas = ko.computed(function() { 
    var descripciones = ko.utils.arrayMap(this.plans(), function (plan) { 
     return ko.utils.arrayMap(plan.Caracteristicas(), function (carac) { 
      return carac.Descripcion(); 
     }); 
    }); 

    return ko.utils.arrayGetDistinctValues(descripciones.reduce(function (x,y) { 
     return x.concat(y); 
    })); 
}, viewModel); 

viewModel.rows = function(caracteristica) { 
    var cars = ko.utils.arrayMap(this.plans(), function (plan) { 
     var valor = null; 

     var car = ko.utils.arrayFirst(plan.Caracteristicas(), function(carac) { 
      return carac.Descripcion() === caracteristica; 
     }); 

     if (car && car.Valor) { 
      valor = car.Valor(); 
     } 

     return valor; 
    }); 
    return cars; 
}; 

ko.applyBindings(viewModel); 
1

.innerHTML是JavaScript原生功能,並且不使用jQuery工作。嘗試使用.html()代替。

$(element).html(viewModel.value);