Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 手动更新淘汰表_Javascript_Knockout.js - Fatal编程技术网

Javascript 手动更新淘汰表

Javascript 手动更新淘汰表,javascript,knockout.js,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;

我有一个由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();
其他一切都可以。这会导致“未捕获引用错误:未定义名称”

如果我把它改成

self.FinanceTypes().valueHasMutated();
我得到“UncaughtTypeError:undefined不是函数”


感谢调用
ko.utils.arrayPushAll(self.FinanceTypes(),mapped)
mapped
中的所有项目推送到展开的
FinanceTypes
中。调用它而不展开它,您就不必调用
valuehassmutated
ko.utils.arrayPushAll(self.FinanceTypes,mapped)

您知道ko.utils.arrayPushAll附加到数组中,而不是覆盖当前数据吗?这就是你想要的吗?你可以改为写“self.FinanceTypes(mapped)”,而Knockout将负责调用valueWillMutate和valuehassmutate。我也这么认为,但没有运气。I get Name not defined error调用FinanceTypeViewModel时,您是否考虑到该项可能未定义/为空?尝试将项目记录到控制台并查看它的外观。敲除部分几乎是正确的(您需要valueWillMutate),但我建议使用我前面提到的方法,因为它与发现问题的方法完全相同(除非您确实希望附加到数组)。上面的代码实际上很好,这是我的绑定-我绑定到名称而不是“名称”。谢谢你的帮助