ObservableArray中的订阅处理程序无法访问父/ root

时间:2013-02-12 17:07:55

标签: knockout.js

我有一个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/

2 个答案:

答案 0 :(得分:0)

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

看起来像是:

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

然后,您可以在parent内访问Row

构建行也会略有改变:

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

答案 1 :(得分:0)

  

在构造函数中传递视图模型可以访问父项,这是一个很好的做法吗?

allSports构造函数中传递Row数组。 另外,因为我看到你没有更改体育列表,所以如果你将allSports设为常数而不是ko.observableArray会更好。