これはフィドルでうまく機能していましたが(今は見つかりません)、VS2012に移動すると、「未定義のメソッド「プッシュ」を呼び出すことができません」というエラーが表示されます。
以下のコードでは、createItemDiv() 関数がうまく機能し、UI 要素を作成します。エラーをスローしているのは、 this.visibleItem.push() を呼び出す showItem() の前の行です。もともとフィドルでこれに問題があり、「これ」を追加して修正しました。このまま「これ」を削除すると、「visibleItem is not defined」となります。
viewmodel.js
var dummyResults = [
{ //sample data is here }
]
var dummyItems = [
]
function VisibleItem(data) {
var self = this;
this.name = ko.observable(data.name);
this.type = ko.observable(data.type);
this.description = ko.observable("");
}
function SearchResult(data) {
var self = this;
this.name = ko.observable(data.name);
this.type = ko.observable(data.type);
}
var viewModel = {
searchResult: ko.observableArray(ko.utils.arrayMap(dummyResults, function (item) {
return new SearchResult(item);
})),
visibleItem: ko.observableArray(ko.utils.arrayMap(dummyItems, function (item) {
return new VisibleItem(item);
})),
showItem: function (item) {
this.visibleItem.push(item);
}
};
ko.applyBindings(viewModel);
site.js
$(document).on('click', '.result', function () {
var item = ko.dataFor(this);
viewModel.showItem(item); //add item to "visibleItems" viewmodel for management
createItemDiv(item); //ui function to show item on screen
});