gpt4 book ai didi

javascript - 如何使用 ko.computed 提取部分 knockoutArray

转载 作者:行者123 更新时间:2023-11-30 17:42:14 25 4
gpt4 key购买 nike

我有一个 knockout 阵列:

Tags = ko.observableArray()

其中充满了标签对象:

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;
}

标签属于文本对象:

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

self.TextId = data.TextId;
self.Title = ko.observable(data.Title);

**self.Tags = ko.observableArray();**

self.TagsOfType1 = ko.computed( function () {

//???

} );

self.TagsOfType2 = ko.computed( function () { ??? } );
self.TagsOfType3 = ko.computed( function () { ??? } );

}

Tag 和 Text 对象的新实例是根据对数据库的 $.getJSON 查询的结果创建的。拿到标签后。我根据标签的“ParentTextId”分配标签。

事情是:我的文本需要一个包含每个 Tag.Type 的数组,并且认为这一定可以通过文本对象上的 ko.computed 函数来实现,因为这将使保存更容易处理“isDirty”原型(prototype)属性。

但是我应该如何设置计算函数呢?

(在此先感谢您的帮助。)

最佳答案

您可以使用 ko.utils.arrayFilter method按类型(或任何其他谓词)过滤您的 Tags 数组。

然后我会创建一个辅助函数,它接受一个 TagType 并返回包含过滤的计算结果:

self.Tags = ko.observableArray();

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

self.TagsOfType1 = createTypeComputed('tagtype1');
self.TagsOfType2 = createTypeComputed('tagtype2');
self.TagsOfType3 = createTypeComputed('tagtype3');

如果您有一组固定的 TagType,您甚至可以缩短它并在循环中调用 createTypeComputed 动态定义您的 TagsOfType1、TagsOfType2 等属性。

关于javascript - 如何使用 ko.computed 提取部分 knockoutArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20826188/

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