淘汰 Durandal 撰写视图 $root 访问权限

Posted

技术标签:

【中文标题】淘汰 Durandal 撰写视图 $root 访问权限【英文标题】:Knockout Durandal compose view $root access 【发布时间】: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 包装器: 【参考方案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 问题?您能否添加一些解释您的代码如何解决原始问题(不是您介绍的问题)?

以上是关于淘汰 Durandal 撰写视图 $root 访问权限的主要内容,如果未能解决你的问题,请参考以下文章

杜兰达尔/淘汰赛。更新其他视图/视图模型

迪朗达尔/淘汰赛。更新其他视图/ viewmodel

如何将 Durandal#composition 集成到淘汰赛模板引擎中

淘汰赛验证:动态约束

Select2 Js 下拉菜单在 durandal Js 中不起作用

Durandal Compose:激活方法并不总是被调用