gpt4 book ai didi

knockout.js - knockout + customBinding 未更新

转载 作者:行者123 更新时间:2023-12-04 11:28:34 25 4
gpt4 key购买 nike

我有一个关于 customBindings 的快速问题,希望有人能帮我解释一下?我认为当一个 observable 被更新时,任何绑定(bind)到该 observable 的 customBinding 都会调用它的“update”方法。我可以看到,当我更新我的 observable 时,正在通知其他订阅者,但似乎没有调用 customBinding。

这是我的 View 模型:

var innerModel = {
name: ko.observable('junk')
};

var innerModel2 = {
name: ko.observable('junk2')
};

var viewModel = {
im1: innerModel,
im2: innerModel2,
selectedModel: ko.observable({name:'xxx'})
};

这是我的自定义绑定(bind):
ko.bindingHandlers.custom = {
update: function(element, valueAccessor) {
console.log("BAM!");
while (element.firstChild)
ko.removeNode(element.firstChild);

ko.renderTemplate('test', valueAccessor(), {}, element, 'replaceNode');

}
};

我的模板只是一个显示“名称”字段的跨度:
<script id='test' type='text/html' charset='utf-8'>
<span data-bind='text: name'></span>
</script>

这是我与 customBinding 一起使用的 HTML:
<div id="container" data-bind="with: viewModel">
<div data-bind="custom: selectedModel">
</div>
</div>

当我将 selectedModel 更新为两个 innerModel 中的任何一个时,会显示正确的名称,但不会调用 customBinding 的“更新”函数。我有一个单独的“selectedModel”可观察订阅者:
viewModel.selectedModel.subscribe(function(newValue) {
console.log(newValue.name());
});

当我更改 selectedModel 时会调用它,那么为什么不调用 customBinding 的更新呢?

这是一个显示问题的jsfiddle:
http://jsfiddle.net/gperng/twAcJ/

任何帮助,将不胜感激!

最佳答案

您需要调用以下函数才能使其工作:

var valueUnwrapped = ko.utils.unwrapObservable(valueAccessor())

试试这个 fiddle 以获得更多信息: http://jsfiddle.net/twAcJ/13/

关于knockout.js - knockout + customBinding 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9511957/

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