无法调用未定义的方法'push'

时间:2013-06-15 14:22:07

标签: mvvm knockout.js

我让这个工作得很好(我现在找不到),但是当我把它移到VS2012时,我收到错误“无法调用方法'推送'未定义'。

在下面的代码中,createItemDiv()函数运行良好并创建UI元素。这是之前的行,showItem()调用this.visibleItem.push()抛出错误。我最初在小提琴中遇到了这个问题,并添加了“this”来修复它。如果我现在删除“this”,我会得到“visibleItem未定义”。

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
});

2 个答案:

答案 0 :(得分:1)

试试这个:

var viewModel = function() {
        var self = this;
        self.searchResult = ko.observableArray(ko.utils.arrayMap(dummyResults, function (item) {
            return new SearchResult(item);
        })),
        self.visibleItem = ko.observableArray(ko.utils.arrayMap(dummyItems, function (item) {
            return new VisibleItem(item);
        })),
        self.showItem = function (item) {
            self.visibleItem.push(item);
        }
    };

答案 1 :(得分:0)

我刚刚意识到我的html中还有一个旧的绑定...将投票结束。