大家好,我问了一个question https://stackoverflow.com/questions/17928558/where-to-write-dom-manipulation-code-when-using-knockout-and-mvvm昨天关于使用淘汰赛时在哪里编写 dom 操作/动画等代码。我之前已将其编码到视图模型中,但被告知这是不正确的。
我现在已经更新了我的代码并按照建议创建了自定义绑定处理程序,但是我需要从自定义绑定处理程序中调用我的视图模型的方法。特别是当动画完成时。我已经这样做了
ko.bindingHandlers.slideUp = {
init:function(element, valueAccessor, allBindingsAccessor, context){
var allBindings = allBindingsAccessor();
var parent = allBindings.parent;
$(element).click(function(){
if(parent.SelectedEmployee() === valueAccessor())return;
var $PanelWrapper = $('#' + allBindings.panelName);
var $Bottom = parseInt($PanelWrapper.css("bottom"));
if($Bottom === 0){
$PanelWrapper.animate({
bottom:"-95"
}, 500, function(){
parent.Select(valueAccessor());
}).animate({
bottom:"0"
}, 500);
}else{
parent.Select(valueAccessor());
$PanelWrapper.animate({
bottom:"0px"
}, 500);
}
});
}
}
我的绑定是
<tbody data-bind="foreach: Emps">
<tr data-bind="slideUp: $data, parent: $parent, panelName: 'PanelWrapper'">
<td data-bind="text: Name"></td>
</tr>
</tbody>
正如您所看到的,我传递了对视图模型的引用以及我想要设置动画的标签的 id。我只是想知道这是否是正确的方法。有没有更好的方法来引用视图模型,我是否正确调用视图模型的方法,是否可以传入我想要使用的html标签的id。一切都很好,但我渴望改进
这是我的链接fiddle http://jsfiddle.net/ricobano/DCP8T/12/