【问题标题】:subscribe handler in ObservableArray cannot access parent/rootObservableArray 中的订阅处理程序无法访问父/根
【发布时间】:2013-02-13 17:36:29
【问题描述】:

我有一个 ko.observableArray 并且我为可观察数组中的项目添加了一个订阅者: eventDate.subscribe(function(newDate) { ... }

在该处理程序中,我无权访问我的视图模型的父级或根。

当我访问this 时,我得到了对window 的引用。我想做的是访问包含可观察数组的范围。 (我在 coffeescript 中尝试了正常和粗箭头 => 的范围)。

我的理由是,我不想在每个项目的可观察数组中复制/引用数据。我主要有骨干经验,所以也许这不是“knockout.js”方式。

我的目标是拥有ko.applyBindings new MainModel(),而不是在window 中为我的模型添加参考。

我创建了一个 jsfiddle 来演示: http://jsfiddle.net/brianzinn/r4bd8/

谢谢。有人知道解决办法吗?

编辑

在构造函数中传递视图模型可以访问父级,这是一个好习惯吗? http://jsfiddle.net/brianzinn/r4bd8/7/

【问题讨论】:

  • 在我决定阅读你的整个问题之前,我告诉你从构造函数中传递父级到一半。这就是我会做的。
  • 我还是决定发布我的答案。

标签: knockout.js


【解决方案1】:

您应该做的是通过Row 构造函数向下传递父级。然后,您将可以轻松访问 Row 的父级。

它看起来像:

class Row
    constructor: (parent) ->
    ...

然后您可以从Row 中访问parent

构建 Row 也会略有变化:

@rows = ko.observableArray [new Row(this)]

【讨论】:

    【解决方案2】:

    在构造函数中传递视图模型可以访问父级,这是一个好习惯吗?

    只需在Row 构造函数中传递allSports 数组。 另外,正如我所见,您不会更改运动列表,因此最好将 allSports 设为常量而不是 ko.observableArray

    【讨论】:

    • 感谢您的回复。 allSports 在我的真实示例中发生了变化,但感谢您的提示。像他一样先回答 jjnguy。
    猜你喜欢
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多