在自定义元素(components.register)中使用时,敲除js foreach绑定不会更新 [英] knockout js foreach binding is not updating when used in custom element (components.register)
本文介绍了在自定义元素(components.register)中使用时,敲除js foreach绑定不会更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
ko.components.register("toast-container", {
viewModel: ToastViewModel,
template: '<div data-bind="foreach: array1"><div data-bind="text:someText"> </div></div>'
});
function ToastViewModel(params) {
var self = this;
self.array1 = ko.observableArray();
self.Onclick = function () {
self.array1.push({ someText: "some content" });
}
}
$(function () {
ko.applyBindings(new ToastViewModel());
});
当我动态地在array1中推送某些内容时,UI不会更新. 请帮助我.
When i push some content in array1 dynamically, the UI is not updating. Please help me.
推荐答案
检查此内容:
ko.components.register("toast-container", {
viewModel: ToastViewModel,
template: '<div class="array" data-bind="foreach: array1"><div data-bind="text:someText"> </div> </div> <button data-bind="click: Onclick">Click me</button> '
});
function ToastViewModel(params) {
var self = this;
self.array1 = ko.observableArray();
self.Onclick = function () {
//alert("click!");
self.array1.push({ someText: "some content" });
}
}
$(function () {
ko.applyBindings({}, $("#host")[0]);
});
#host {
width: 300px;
height: 300px;
border: 1px solid red;
}
.array {
border: 1px solid green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="host">
<div data-bind="component: { name: 'toast-container'}"></div>
</div>
注意:该模型是在组件内部创建的,因此您无需在applyBindings函数调用中创建一个新模型.
Note: the model is created inside component, thus you need not to create a new one in the applyBindings function call.
更新1:按钮在组件外部,组件模型已拆分.
Update 1: Button is outside the component, component model has been splitted.
ko.components.register("toast-container", {
viewModel: ToastContainerViewModel,
template: '<div class="array" data-bind="foreach: array"><div data-bind="text:someText"> </div> </div> '
});
function ToastContainerViewModel(params) {
self.array = params.array;
}
function ToastViewModel(params) {
var self = this;
self.array1 = ko.observableArray();
self.Onclick = function () {
//alert("click!");
self.array1.push({ someText: "some content" });
}
}
$(function () {
ko.applyBindings(new ToastViewModel(), $("#host")[0]);
});
#host {
width: 300px;
height: 300px;
border: 1px solid red;
}
.array {
border: 1px solid green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="host">
<button data-bind="click: Onclick">Click me</button>
<toast-container params="array: array1"></toast-container>
</div>
这篇关于在自定义元素(components.register)中使用时,敲除js foreach绑定不会更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文