Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止模板完全重新加载_Javascript_Mvvm_Knockout.js - Fatal编程技术网

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());​