Javascript 奇怪的数据绑定问题
我的代码有一个疯狂的问题。我正在努力实现 在我的代码中,但我没有成功。以下是我所做的: 视图模型:Javascript 奇怪的数据绑定问题,javascript,knockout.js,Javascript,Knockout.js,我的代码有一个疯狂的问题。我正在努力实现 在我的代码中,但我没有成功。以下是我所做的: 视图模型: viewModelInbox = function(){ query: ko.observable(''); var checked = false, mainData = ko.observableArray([]), showView
viewModelInbox = function(){
query: ko.observable('');
var checked = false,
mainData = ko.observableArray([]),
showView = ko.observable(),
currentView = ko.observable(),
approve = function(){
},
disapprove = function(){},
toggle = function () {
if(checked){
$.each(mainData(), function(){
this.checkB(false);
});
checked = false;
return;
}
if(!checked){
$.each(mainData(), function(){
this.checkB(true);
});
checked = true;
return;
}
};
viewModelInbox.mainData = ko.dependentObservable(function() {
var search = this.query().toLowerCase();
return ko.utils.arrayFilter(viewModelInbox, function(test) {
return test.name.toLowerCase().indexOf(search) >= 0;
});
}, viewModelInbox);
return {
mainData: mainData,
showView: showView,
currentView: currentView,
approve: approve,
disapprove: disapprove,
toggle: toggle
};
},
mainData
observeable数组包含一些值,如name、code、date等
我遇到的问题是,我遇到了以下错误:
TypeError: this.query is not a function
var search = this.query().toLowerCase();
我很确定我错过了一些非常小的东西,但因为我在knockoutjs中是个十足的noob,所以我无法发现它。它似乎不是什么小东西 您的视图模型应该是
var ViewModel = function() {
this.query = ko.observable(''); // use ';'
this.mainData = ko.observableArray([]);
};
或
你不能把它们混在一起。或者你可以这样写:
var ViewModelInbox = function() {
var self = this;
self.query = ko.observable('');
self.dataSource = []; // data source
self.mainData = ko.computed(function() {
var search = self.query().toLowerCase();
return ko.utils.arrayFilter(self.dataSource, function(item) {
return item.name.toLowerCase().indexOf(search) >= 0;
});
});
self.showView = ko.observable();
self.currentView = ko.observable();
self.approve = function() {
};
self.disapprove = function() {
};
self.checked = ko.observable(true);
self.toggle = function() {
var toCheck = !self.checked();
ko.arrayForEach(self.mainData(), function(data) {
data.checkB(toCheck);
});
self.checked(toCheck);
};
};
ko.applyBindings(new ViewModelInbox());
我使用的是第二种结构,但逗号(,)似乎不起作用。它要求的是(;)而不是它如果使用第二种结构,则应删除“function”,并使用“:”而不是“=”
var ViewModelInbox = function() {
var self = this;
self.query = ko.observable('');
self.dataSource = []; // data source
self.mainData = ko.computed(function() {
var search = self.query().toLowerCase();
return ko.utils.arrayFilter(self.dataSource, function(item) {
return item.name.toLowerCase().indexOf(search) >= 0;
});
});
self.showView = ko.observable();
self.currentView = ko.observable();
self.approve = function() {
};
self.disapprove = function() {
};
self.checked = ko.observable(true);
self.toggle = function() {
var toCheck = !self.checked();
ko.arrayForEach(self.mainData(), function(data) {
data.checkB(toCheck);
});
self.checked(toCheck);
};
};
ko.applyBindings(new ViewModelInbox());