淘汰 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 访问权限的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Durandal#composition 集成到淘汰赛模板引擎中