Javascript 如何使复选框与敲除一起工作
我从Ryan Niemeyer那里找到了这个示例,并开始按照我自己编写代码的方式来操作它,但后来它停止了工作。有人能告诉我为什么吗 备选方案1是我的变体 备选方案2基于Ryans解决方案,确实有效(只需注释/取消注释Applybindings) 为什么备选方案1不起作用 我的问题是filteredRows:Javascript 如何使复选框与敲除一起工作,javascript,checkbox,knockout.js,Javascript,Checkbox,Knockout.js,我从Ryan Niemeyer那里找到了这个示例,并开始按照我自己编写代码的方式来操作它,但后来它停止了工作。有人能告诉我为什么吗 备选方案1是我的变体 备选方案2基于Ryans解决方案,确实有效(只需注释/取消注释Applybindings) 为什么备选方案1不起作用 我的问题是filteredRows: self.filteredRows = ko.dependentObservable(function() { //build a quick index from the flag
self.filteredRows = ko.dependentObservable(function() {
//build a quick index from the flags array to avoid looping for each item
var statusIndex = {};
ko.utils.arrayForEach(this.flags(), function(flag) {
statusIndex[flag] = true;
});
//return a filtered list
var result = ko.utils.arrayFilter(this.Textbatches(), function(text) {
//check for a matching genré
return ko.utils.arrayFirst(text.genre(), function(genre) {
return statusIndex[genre];
});
return false;
});
console.log("result", result);
return result;
});
我想根据类型属性过滤我的TextBatch(db中的字符串,从db收集的数据是字符串,而不是数组/对象)
在这里摆弄:您有各种各样的问题,大多数问题都可以通过检查浏览器的JavaScript控制台并读取异常来解决 下面是您需要修复的列表:
- 您在声明中未键入
,因此正确的是Textbatches
self.Textbatches=ko.observearray()代码>
- 您在
中使用filteredRows
时存在范围问题。因此,如果您使用的是this
,您应该坚持使用它:self
应该是this.flags()
self.flags()
应该是this.Textbatches()
self.Textbatches()
- 如果要在
ko.utils.arrayFirst
- 最后,您的
接受单个参数,但您使用对象调用它,因此您需要将其更改为:Textbatch
当然,您也可以将调用位置更改为使用单个参数而不是对象Textbatch = function(data) { var self = this; self.id = ko.observable(data.id); self.name = ko.observable(data.name); self.statuses = ko.observableArray(data.status); self.genre = ko.observableArray(data.genre); self.createdBy = ko.observable(data.createdBy); };
这是一份包含上述所有修复的工作。谢谢,@nemesv。我想我有点匆忙。(humble pie,himblepie)然而,我的大问题(我想)是,制作一个数组并不适合我的解决方案。那么除了“ko.utils.arrayFirst”之外,我还有哪些选择呢?如果你不需要一个数组作为流派,就不要使用数组,删除
ko.utils.arrayFirst
,只返回statusIndex[text.Genre()]
参见:那么“return statusIndex[text.Genre()]”会向arrayFilter返回true/false,这就是过滤数组的方法,对吗?如果从arrayFilter
返回true,则会包括该项。你可以在这里阅读更多关于KO数组助手的信息:Thanx很多,nemesv!:)