作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我有一个 knockout 阵列: Tags = ko.observableArray() 其中充满了标签对象: Tag = function(data){ var self = this;
我是一名优秀的程序员,十分优秀!