【问题标题】:Multiple Observable Arrays多个可观察数组
【发布时间】:2018-08-02 18:21:31
【问题描述】:

我正在尝试从我的服务器获取一些数据,根据这些数据创建对象,然后将其显示在我的页面上的 foreach 数据绑定中。

这是我的代码:

self.houses = ko.observableArray([]);
self.flats = ko.observableArray([]);

function Building(item, checked){
    self = this;
    self.id = item.id;
    self.name = item.nazwa;
    self.photo = '/' + item.pic;
    self.type = item.type_text;
    self.selected = ko.observable(checked);
}

$.getJSON("/api/getHouses", function(allData) {
    self.houses($.map(allData, function(item) { return new Building(item, 0) }));
});

$.getJSON("/api/getFlats", function(allData) {
    self.flats($.map(allData, function(item) { return new Building(item, 0) }));
});

当我运行这段代码时,我得到一个错误:

self.flats is not a function

如果我要删除其中一个 getJSON 函数,并且只有一个(其中一个),它工作正常。我一次只能有一个 observableArray 吗?

【问题讨论】:

  • 没有理由不能拥有多个 observableArray。我猜想某处存在范围界定问题。你能展示你的完整视图模型吗?
  • @JasonSke 代码相当多。范围界定是什么意思?这一切都在一个视图模型中。有问题吗?
  • 范围界定是指“自我”的上下文。如果您有多个自变量,则它可能不是您在引发错误时所期望的。 ajax 调用是从函数内执行的,还是真的像上面那样在根视图模型中执行?
  • @JasonSake 它在根视图模型中。只有 1 个自我。
  • @JasonSke 成功了。如果您将其添加为答案,我会接受。干杯!

标签: knockout.js knockout-2.0 knockout-3.0


【解决方案1】:

看起来问题是“self”变量正在被 Building 函数改变,并且在 ajax 调用返回时不再指向根视图模型。修复可能就像在 self = this 前面放置“var”一样简单

self.houses = ko.observableArray([]);
self.flats = ko.observableArray([]);

function Building(item, checked){
    //self = this; 
    var self = this; //the fix
    self.id = item.id;
    self.name = item.nazwa;
    self.photo = '/' + item.pic;
    self.type = item.type_text;
    self.selected = ko.observable(checked);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-25
    • 2011-06-17
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多