很抱歉我的头衔很糟糕,但我不确定该怎么称呼它,而且有人可以指导我正确的方向。
我在使用Typescript和类KnockoutFileDropArea。
我当时想做的事情如下:
<div data-bind="with:fileDropArea">
<div data-bind="foreach:files">
</div>
</div>
KnockoutFileDropArea具有属性文件ect。
以上是直截了当的。只需在我的KnockoutFileDropArea的viewmodel上添加一个属性。但我需要做的是当它绑定我的KnockoutFileDropArea时,我想对它所绑定的HtmlElement做一些事情。
当我的KnockoutFileDropArea被绑定时,我该怎么做才能将元素附加到元素上?
创建一个新的(不能记住它们被称为'BindingHandler')会更好吗?所以它就像<div data-bind="droparea: fileDropArea">
。
答案 0 :(得分:1)
一个不错的选择是创建一个custom binding。
您的自定义绑定可以只是在元素上执行您想要的功能,并在绑定元素时运行,并且可以将其与with
绑定一起使用。
ko.bindingHandlers.test = {
init: function(element, valueAccessor, allBindings, data, context) {
//do something with the element
}
}
否则,您的自定义绑定可以包装with
绑定,如:
ko.bindingHandlers.test = {
init: function(element, valueAccessor, allBindings, data, context) {
//do something with the element
return ko.bindingHandlers["with"].init.apply(this, arguments);
},
update: function(element, valueAccessor, allBindings, data, context) {
return ko.bindingHandlers["with"].update.apply(this, arguments);
}
};
更新:在KO 3.1中,with
绑定不再具有update
功能,因为它现在可以使用init
中的计算结果目的。因此,可以删除上面的update
函数。
注意:with
被引用,因为较旧的IE不喜欢使用with
作为属性名称。