【问题标题】:Knockout Durandal compose view $root access淘汰 Durandal 撰写视图 $root 访问权限
【发布时间】:2013-08-09 20:43:38
【问题描述】:

我正在使用 Hot SPA 模板(使用淘汰赛和 durandal)在屏幕上显示某些内容。 我的 html 代码变得很长,所以我试图将它拆分成更小的可重用组件。

代码呈现查找并显示我期望的所有内容。但我似乎失去了主视图模型的句柄

从我的主要观点来看,我尝试了

<!-- ko if: A -->
<!--ko compose: { model: $data, view: '../tmpl/A'} -->
<!--/ko-->
<!--/ko-->

在我的 tmpl/A.html 文件中,我有以下内容:

         <!-- ko foreach: array -->
            <!--ko compose: { model: $data, view: '../tmpl/tmpl1'} -->
            <!--/ko-->
            <!--/ko-->

现在从 /tmpl/tmpl1 我尝试将按钮绑定到我的模型 做点什么

它什么都不做。 从 /tmpl/tmpl1 内部看来,我只能看到数组项。 我试着打印出来

<div data-bind="text: ko.toJSON($data)"></div>
<div data-bind="text: ko.toJSON($root)"></div>

两者都只显示数组项。

请告知我能做什么。

【问题讨论】:

  • 您确定没有收到 JavaScript 错误吗? ko.toJSON($root) 应该产生一个循环引用。
  • 我从 ko compose 中删除了 'model: $data',现在父上下文流过。案件已解决。
  • 当使用 你必须注意一件事。 Durandal 可能会摆弄第一个 div 以使其成为包装器。因此,您通常应该制作自己的不带任何绑定的 div 包装器:

标签: knockout.js viewmodel root durandal


【解决方案1】:

如果所有这些类型都是可观察的并且您的 javascript 转换无法在内部访问,如何检查您的完整 $root 值? 解决方案:

for (var element in ko.contextFor($0).$root) {
    if (ko.contextFor($0).$root.hasOwnProperty(element)) {
        console.info(element + ": ") 
        console.info(ko.toJS(ko.contextFor($0).$root[element])) 
    }
}

【讨论】:

  • 是否回答了 OP 问题?您能否添加一些解释您的代码如何解决原始问题(不是您介绍的问题)?
猜你喜欢
  • 2013-04-09
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2014-04-18
  • 2014-08-01
  • 2015-02-24
  • 2015-09-30
相关资源
最近更新 更多