gpt4 book ai didi

javascript - 如何创建双向 ko.compulated() 数组过滤器

转载 作者:行者123 更新时间:2023-11-28 08:38:01 24 4
gpt4 key购买 nike

我正在尝试自动更新属于文本对象的 3 个“标签”字段(“ManagerTags”、“EmployeeTags”、“LocationTags”)。每个 Tags-field 都是来自 Tags=ko.observableArray() 的过滤数组。

这是文本对象:

var Textbatch = function (data) {
var self = this;

self.TextbatchId = data.TextbatchId;
self.Title = ko.observable(data.Title);
self.Text = ko.observable(data.Text);
self.TextTags = ko.observableArray();

function createTypeComputed(tagType) {
return ko.computed(function () {
return ko.utils.arrayFilter(self.TextTags(), function (item) {
return item.Type() == tagType;
});
});
}

self.ManagerTags = createTypeComputed(0);
self.EmployeeTags = createTypeComputed(1);
self.LocationTags = createTypeComputed(2);

self.removeTag = function (tagToRemove) {
self.TextTags.remove(function (item) {
return item.Id == tagToRemove.Id;
});
}
}

标签对象如下所示:

var Tag = function(data){
var self = this;

self.Id = data.Id;
self.Name = ko.observable(data.Name);
self.Type = ko.observable(data.Type);
self.ParentTextId = data.TextId;
}

我希望数组“TestTags()”能够使用过滤后的数组自动更新(也许作为计算函数?)。 IE。 “ManagerTags()”(以及“EmployeeTags()”和“LocationTags()”)与“TextTags()”是双向绑定(bind)的,而不是如上面代码所示的单向绑定(bind)。

参见 fiddle :http://jsfiddle.net/mnnEe/

示例:我希望“Textbatch.ManagerTags()”成为“Textbatch.TextTags()”的计算子集,其中 TagType=0。但我想通过 select2-plugin 编辑和添加标签:

<input data-bind="value: ManagerTags, select2: {tags: ManagerTags, tokenSeparators: [',', ' ']}"/>

如何在没有这种明显的循环引用的情况下实现这种 2 向绑定(bind)?

最佳答案

我很难弄清楚你到底想做什么。但我想我有一个想法。我唯一可以建议的是您的 Textbatch 对象具有所选过滤器的可观察值。然后订阅该可观察的。即,将其添加到您的 Textbatch 对象中。

self.selectedFilter = ko.observable(/*optionally set a default*/);
self.selectedFilter.subscribe(function(newValue){
switch(newValue){
case 0:
//Do your stuff
break;
case 1:
//Do your stuff
break;
case 2:
//Do your stuff
break;
default:
break;
}
});

现在,当您创建并更改为 Textbatch.selectedFilter 时,您可以通过 switch 语句更新整个对象。

关于javascript - 如何创建双向 ko.compulated() 数组过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20840905/

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