Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knockout.JS:self.myObservable不是函数,与代码顺序有关_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript Knockout.JS:self.myObservable不是函数,与代码顺序有关

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() {

我有一个使用knockout的页面,它有一个搜索字段,从下拉列表中选择的值和页码

所有这些都是在设置为默认值时初始化的,特别是对于首次运行/页面访问

问题是我不明白为什么会出现以下错误

"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即可()
现在正在做注意到的更改..几分钟后将发回这里:)顺便说一句!非常感谢你们所有人的快速直接回答..这很快就解决了我的问题:)