【问题标题】:subscribing to observables to update viewmodel订阅可观察对象以更新视图模型
【发布时间】:2012-07-25 07:02:07
【问题描述】:

http://jsfiddle.net/tim3046/jtmY3/2/


我让 observables 部分工作,因为它更新了顶部 par 字符串。

这就是我订阅的内容,所以我想知道这部分是否有问题,因为当我添加一个高尔夫球手时,它具有当前选择的球场标准杆。 (即)我可以让 2 个高尔夫球手在一个球场上,3 个在另一个球场上,所以当单选按钮被点击时,它所做的唯一事情就是更改要添加的下一个高尔夫球手的标准杆。

self.site.subscribe(function (newValue) {
    var len = self.golfers().length;
    for (var i = 0; i < len; i++) {
        self.golfers()[i].par(self.availableCourses()[self.site()].courseP);
    }
});

这里是我有可用课程的地方

self.availableCourses = ko.observableArray([
        { name: ko.observable("Fort Cherry Golf Club"),
            courseP: [ko.observable(4), ko.observable(4), ko.observable(4), ko.observable(5), ko.observable(3), ko.observable(4),
            ko.observable(4), ko.observable(4), ko.observable(4), ko.observable(4), ko.observable(4), ko.observable(3), ko.observable(4),
            ko.observable(5), ko.observable(4), ko.observable(3), ko.observable(4), ko.observable(4)]
        },
        { name: ko.observable("Lake View Golf Course"),
            courseP: [ko.observable(4), ko.observable(4), ko.observable(4), ko.observable(3), ko.observable(5), ko.observable(4),
            ko.observable(5), ko.observable(3), ko.observable(4), ko.observable(4), ko.observable(4), ko.observable(3), ko.observable(4),
            ko.observable(5), ko.observable(4), ko.observable(3), ko.observable(4), ko.observable(5)]
        }
            ]);

【问题讨论】:

  • 那是太多代码了。请归结为相关元素。
  • 我不确定我可以取出什么以及我不能取出什么,因为它需要它才能正常工作。基本上我想做的是订阅我的视图模型以检测和更改然后刷新它。这是我发现的一个例子,它正在做我想做的事情,但使用 viewModel 作为变量而不是函数jsfiddle.net/rniemeyer/TTGbH

标签: knockout.js refresh viewmodel


【解决方案1】:

通过淘汰赛,您可以在视图模型中创建可观察对象来表示 UI 的状态。然后,如果需要,您可以订阅这些 observables 中的更改。请参阅KO page about observables 的最底部。

我设置了一个简单的 fiddle 来演示在 observables 上使用 subscribe 函数的基础知识:

http://jsfiddle.net/YRscs/1/

【讨论】:

  • 我得到了订阅,当它触发时有没有办法刷新视图模型?我有 observablesArrays,它们都是相互计算的,当我改变其中一个时,我试图让其他的也更新。
  • 当您更改视图模型时,您正在订阅它。那么,如果它刚刚改变,为什么还要刷新它呢?你想做什么?
  • 我知道它有很多代码,但如果你运行它并点击单选按钮,你可以看到我想要做什么。基本上我试图在两个具有不同标准杆的高尔夫球场之间切换。一旦标准杆发生变化,我希望第一个函数调用者 Golfer 再次运行并更新数据以反映新的球场标准杆。这是更新的小提琴jsfiddle.net/tim3046/jtmY3/2
  • @user1515742 KO 应该在您更新其中一个依赖项时自动更新您的依赖 observables。我猜想在您的代码中某处您正尝试使用 = 而不是调用它的“setter”函数来设置一个 observable。也就是说,我怀疑你在做 viewModel.observable = value;而不是 viewModel.observable(value);
  • 我检查了但找不到任何东西,我正在使用计算函数,我将数组的每个元素放入一个变量中以保持计数直到结束。然后我返回计数,例如每个分数类型我都有this.OUT = ko.computed(function () { return addSides(golfer.holes, 0, 8); });。可能是这样吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多