我有一个淘汰阵列:
Tags = ko.observableArray()
填充了Tag-objects:
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 () { ??? } );
}
使用$ .getJSON查询到数据库的结果创建Tag和Text对象的新实例。获得标签后。我根据他们的“ParentTextId”分配标签。
事情是:我需要为我的文本添加每个Tag.Type的数组,并认为这必须可以与Text-object上的ko.computed函数一起使用,因为这样可以更容易地处理“isDirty”原型属性。
但是我应该如何设置计算函数?
(预先感谢您提供任何帮助。)
答案 0 :(得分:2)
您可以使用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等属性。