gpt4 book ai didi

knockout.js - 如何从 knockout 绑定(bind)中获取 DOM 元素?

转载 作者:行者123 更新时间:2023-12-04 03:44:47 25 4
gpt4 key购买 nike

我已经使用 knockout 将 DOM 元素绑定(bind)到 viewModel。
当我更改底层模型上的属性时,它会更改 DOM - 一切正常。

但是,有没有办法获取绑定(bind)的 DOM 元素,以便在底层模型从外部更新时向它添加一个类?

我使用了自定义绑定(bind),它使我可以访问 DOM 元素,但我想知道是否有直接来自 viewModel 的绑定(bind)属性的更简单方法?

谢谢

示例代码(TypeScript)

SetMyCell(row: number, newValue: any) {

var ditem = this._DataItems[row];

// update the actual value
ditem.Producer(newValue);

// Now I wish to decorate the DOM item this Producer property is
// bound to with a class. How to go about that?

}

最佳答案

例如,您可以滥用可见绑定(bind)来执行传递 $element 和 $data 的函数。

<span data-bind="visible: func1($element, $data)">Test span</span>

看看这个 fiddle

我知道您在上面提到您不想使用自定义绑定(bind),但我仍然想指出这个选项。尽管我使用的是自定义绑定(bind),但当外部更改发生时,修改元素的逻辑仍将发生在 View 模型中。
ko.bindingHandlers.widget = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
var elemObservable = valueAccessor();
if (ko.isObservable(elemObservable)) {
elemObservable(element);
}
}
};

var vm = function () {
var self = this;
.....
self.spanElement = ko.observable();
self.btnClick = function (){
var elem = self.spanElement();
$(elem).html("This is the span element");
};
......
};

和 html 将是
<button data-bind="click: btnClick">change element text or something else</button>
<span data-bind="widget: spanElement"></span>

我更新了 fiddle所以你可以看到它在行动

关于knockout.js - 如何从 knockout 绑定(bind)中获取 DOM 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15071111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com