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

Knockout add my own data-bind attribute like With

本文关键字:属性 With 数据绑定 自己的 添加 我自己      更新时间:2023-09-26

很抱歉我的标题不好,但我真的不确定该怎么称呼它,有人可以引导我朝着正确的方向前进。

我正在打字稿和类KnockoutFileDropArea工作。

然后我想做的是这样的:

<div data-bind="with:fileDropArea">
    <div data-bind="foreach:files">
    </div>
</div>

KnockoutFileDropArea 具有属性文件 etc。

以上是直截了当的。只是在我的KnockoutFileDropArea等视图模型上添加一个属性。但是我需要做的是,当它绑定我的KnockoutFileDropArea时,我想对它绑定的HtmlElement做一些事情。

当我的 KnockoutFileDropArea 绑定时,我可以做些什么来将某些内容附加到元素?

创建一个新的(不记得它们叫什么,"绑定处理程序")会更好吗,比如。所以它就像<div data-bind="droparea: fileDropArea">.

一个不错的选择是创建自定义绑定。

自定义绑定可以只在元素上执行所需的功能,并在元素绑定时运行,并且可以将其与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作为属性名称。