Javascript 手动更新淘汰表
我有一个由AJAX调用填充的可观察数组,但它没有更新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;
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),但我建议使用我前面提到的方法,因为它与发现问题的方法完全相同(除非您确实希望附加到数组)。上面的代码实际上很好,这是我的绑定-我绑定到名称而不是“名称”。谢谢你的帮助