Javascript 如何防止模板完全重新加载
我在视图模型上使用此方法在表格行的普通模板和可编辑模板之间切换:Javascript 如何防止模板完全重新加载,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,我在视图模型上使用此方法在表格行的普通模板和可编辑模板之间切换: contactsViewModel.templateToUse = function (contact) { return contactsViewModel.selectedItem() === contact ? 'contacts-editTmpl' : 'contacts-itemsTmpl'; }; 因此,我将此方法称为,而不是模板名称: <tbody data-bind="template:
contactsViewModel.templateToUse = function (contact) {
return contactsViewModel.selectedItem() === contact ? 'contacts-editTmpl' : 'contacts-itemsTmpl';
};
因此,我将此方法称为,而不是模板名称:
<tbody data-bind="template: { name: templateToUse, foreach: filterItems }"></tbody>
我希望它只更改selectedItem的模板,而不更改其余的模板,但不确定如何进行
感谢您的帮助一个选项是只需在
filteredItems
上使用foreach
,然后在具有行级模板的每一行上使用模板
绑定
比如:
<tbody data-bind="foreach: items">
<tr data-bind="template: { name: $root.templateToUse }"></tr>
</tbody>
样本:
另一种选择是将“选定的”可观察对象移动到项目本身。如果您想将多行置于编辑模式,这将非常有效。在这里总是一件愉快的事。谢谢:)
<tbody data-bind="foreach: items">
<tr data-bind="template: { name: $root.templateToUse }"></tr>
</tbody>
var ViewModel = function() {
this.items = ko.observableArray([
{ name: ko.observable("one") },
{ name: ko.observable("two") },
{ name: ko.observable("three") }
]);
this.selectedItem = ko.observable();
this.templateToUse = function(item) {
return item === this.selectedItem() ? "edit" : "view";
}.bind(this);
};
ko.applyBindings(new ViewModel());