1

これはフィドルでうまく機能していましたが(今は見つかりません)、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
});
4

2 に答える 2