gpt4 book ai didi

javascript - knockout.js 3.3 - 在 foreach 绑定(bind)中重新呈现组件

转载 作者:行者123 更新时间:2023-11-29 14:47:07 25 4
gpt4 key购买 nike

我的 viewModel 由带有可观察元素的可观察数组组成。

// viewmodel
var viewModel = function () {
this.o = ko.observableArray();
for (var i = 0; i < 3; i++)
this.o.push(ko.observable(0));
};

我需要更改这些元素的值。为此,我创建了组件。它的简单示例如下:

//custom element <component>
ko.components.register("component", {
viewModel: function (params) {
var self = this;
this.value = params.value;
console.log("init component");
this.i = 1;
this.change = function () {
self.value(self.i++);
console.log("change to " + self.value());
}
},
template: "<span data-bind='text: value'></span> <button data-bind='click:change'>Change</button>"
});

此组件可以更改 params.value 中的可观察元素的值。

我的观点很简单:

<!--ko foreach:o-->
<component params="value: $rawData"></component>
<!--/ko-->

完整示例:http://jsfiddle.net/tselofan/xg16u5cg/7/问题是当 observable 数组中的 observable 元素的值发生变化时,组件会再次呈现,因为它位于 foreach 绑定(bind)内。您可以在日志中看到这一点。在这种情况下我可以使用什么最佳实践?谢谢

最佳答案

每次数字更改时都会重新创建组件,因为组件的上下文数字。

http://jsfiddle.net/Crimson/xg16u5cg/8/

<!-- ko foreach: o -->
<component params="value: $data.myNumber"></component>
<!-- /ko -->

//Test how components work in foreach binding
//custom element <component>
ko.components.register("component", {
viewModel: function (params) {
var self = this;
this.value = params.value;
console.log("init component");
this.i = 1;
this.change = function () {
self.value(self.i++);
console.log("change to " + self.value());
}
},
template: "<span data-bind='text: value'></span> <button data-bind='click:change'>Change</button>"
});


// viewmodel
var viewModel = function () {
this.o = ko.observableArray();
for (var i = 0; i < 3; i++)
this.o.push({myNumber: ko.observable(0)});
};

ko.applyBindings(new viewModel());

关于javascript - knockout.js 3.3 - 在 foreach 绑定(bind)中重新呈现组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455607/

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