Javascript Knockout.JS:self.myObservable不是函数,与代码顺序有关
我有一个使用knockout的页面,它有一个搜索字段,从下拉列表中选择的值和页码 所有这些都是在设置为默认值时初始化的,特别是对于首次运行/页面访问 问题是我不明白为什么会出现以下错误Javascript Knockout.JS:self.myObservable不是函数,与代码顺序有关,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有一个使用knockout的页面,它有一个搜索字段,从下拉列表中选择的值和页码 所有这些都是在设置为默认值时初始化的,特别是对于首次运行/页面访问 问题是我不明白为什么会出现以下错误 "self.selectedTeamId is not a function()" 我知道。。这必须是具有“事物顺序”的东西,因此在使用它时,它尚未初始化 有人能纠正我的错误吗 代码: $(document).ready(function() { var ViewModel = function() {
"self.selectedTeamId is not a function()"
我知道。。这必须是具有“事物顺序”的东西,因此在使用它时,它尚未初始化
有人能纠正我的错误吗
代码:
$(document).ready(function() {
var ViewModel = function() {
var self = this;
self.photos = ko.observableArray();
self.selectedTeamId = ko.observable(0);
self.searchString = ko.observable('');
self.pageNumber = ko.observable(1);
self.clearFilters = function() {
self.searchString(''); // set default to ''
self.selectedTeamId(0); // set default to 0
self.pageNumber(1); // set default to 1
self.getPhotos();
};
self.getPhotos = function () {
var photoParams = "?teamId=" + self.selectedTeamId() + "&search=" + encodeURIComponent(self.searchString()) + "&pageNumber=" + self.pageNumber();
$.get("api/Photo/GetPhotos" + photoParams,
function(data) {
self.photos(data);
}, "json");
};
};
var photosModel = new ViewModel();
ko.applyBindings(photosModel, document.getElementById("photoarchive"));
// THE NEXT LINE GIVES THE ERROR (self.selectedTeamId())
var photoParams = "?teamId=" + self.selectedTeamId() + "&search=" + encodeURIComponent(self.searchString()) + "&pageNumber=" + self.pageNumber();
$.get("api/Photo/GetPhotos" + photoParams,
function(data) {
photosModel.photos(data);
}, "json");
});
self
是您的ViewModel
函数的本地变量。在该功能之外无法访问它
当您将ViewModel
存储在photomodel
变量中时,您可以通过以下方式访问selectedTeamId
可观察:
photosModel.selectedTeamId()
您需要对self.searchString()
和self.pageNumber()
执行相同的操作
但是,也就是说,您可以调用
photomodel.getPhotos()
,而不是在ViewModel
范围之外复制整个函数。当您说“下一行给出错误”时,这是实际的重复代码行吗,或者你只是在你的问题中重复self.getPhotos的内容?没有。。这是完整的代码。。它可能写得更好(不复制api调用..如您所见..加载页面时执行一个api调用,单击按钮时调用一个api调用getPhotos()(用于过滤、搜索等..)。如果确实是这样,OP可以删除所有重复的代码,只需调用photomodel.getPhotos即可()
现在正在做注意到的更改..几分钟后将发回这里:)顺便说一句!非常感谢你们所有人的快速直接回答..这很快就解决了我的问题:)