手动更新knockout observableArray

时间:2014-08-06 10:47:48

标签: javascript knockout.js

我有一个可观察的数组由AJAX调用填充,但它没有更新。

function ViewModel() {
    var self = this;
    self.FinanceTypes = ko.observableArray([]);
    self.Country = ko.observable('@Model.Country.CountryName');

    function FinanceTypeViewModel(data) {
        var self = this;
        self.Name = data.Name;
        self.Tax = data.TaxPercentage;
        //self.Accounts = data.AccountTypes;
    }

    self.getFinanceTypes = function() {
        var data = { country: ko.toJS(self.Country()) };

        $.getJSON("/Admin/GetFinanceTypes", data, function(result) {
            var mapped = ko.utils.arrayMap(result, function(item) {
                return new FinanceTypeViewModel(item);
            });
            ko.utils.arrayPushAll(self.FinanceTypes(), mapped);
            self.FinanceTypes.valueHasMutated();
        });
    }

    self.getFinanceTypes();
}

问题在于

self.FinanceTypes.valueHasMutated();
其他一切都有效。这给出了一个" Uncaught ReferenceError:Name未定义"

如果我将其更改为

self.FinanceTypes().valueHasMutated();

我得到" Uncaught TypeError:undefined不是函数"

由于

1 个答案:

答案 0 :(得分:0)

致电ko.utils.arrayPushAll(self.FinanceTypes(), mapped)mapped中的所有项目推送到解包 FinanceTypes。不打开它就打电话给你,你不必打电话给valueHasMutatedko.utils.arrayPushAll(self.FinanceTypes, mapped)