2016-11-09 4 views
1

の問題は、私はsearchfield、ドロップダウンからSelectedValueの、およびページ番号を持っているノックアウトを使用してページを持っている...Knockout.JS:self.myObservableは関数ではありません、コード順

これらはすべてでをを初期化されます特に最初の実行/ページアクセスのために、defaultvaluesに設定..

問題は、私は私が私が知っている次のエラーに

"self.selectedTeamId is not a function()" 

を得ている理由を理解しないということである。これは、と何かである必要があります"オーダーオーダーfのもの "を使用しているので、はまだに初期化されています。

私の間違いを訂正することはできますか?

CODE:

$(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"); 
}); 
+1

「次の行にエラーが発生しました」と書かれているのは、実際のコード行が重複しているか、質問内で 'self.getPhotos'の内容を繰り返すだけですか? –

+0

いいえ..これは完全なコードです。おそらくもっとよく書かれているかもしれません(api呼び出しを複製しません)。ページの読み込み時に1つのAPIコールが実行され、getPhotos()が1つ呼び出されます。 –

答えて

1

selfあなたViewModel関数にローカルな変数です。その機能の外部ではアクセスできません。

あなたphotosModel変数内のあなたのViewModelを保存しているとして、あなたは代わりで観察selectedTeamIdにアクセスすることができます。

photosModel.selectedTeamId() 

あなたがself.searchString()self.pageNumber()と同じことを行う必要があります。

ただし、ViewModelのスコープの外にある関数全体を複製するのではなく、photosModel.getPhotos()を呼び出すこともできます。

+1

OPが実際に何が起こっているのであれば、OPはその重複したコードをすべて削除して 'photosModel.getPhotos()'を呼び出すことができます –

+0

今注目されている変更を行う..数分でここに戻ってきます:)ありがとうございました! –

+0

非常に迅速かつ直接的な答えを皆様にお寄せいただきありがとうございます。これで私の問題は間もなく解決されました! :) –

関連する問題