Knockout添加我自己的数据绑定属性,如With

时间:2013-09-09 18:52:52

标签: javascript knockout.js

很抱歉我的头衔很糟糕,但我不确定该怎么称呼它,而且有人可以指导我正确的方向。

我在使用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">

1 个答案:

答案 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作为属性名称。