这是一个澄清实现此目的的最佳方法(或任何方法!)的问题。这可能是我尝试将自己的.net编码经验应用于这种新的工作方式的方式,但是我不敢相信对于许多编码人员来说,这不是一个现实问题。
所以。主视图/视图模型会在页面上使用许多子视图,因为某些部分会根据用户的选择/操作进行更改。这些子视图组成母版页:
<div data-bind="compose: { model: articleSection, preserveContext: true }"></div>
...在子视图中,我能够引用控制主视图的根可观察对象,如下所示:
<a href="#" class="btn" data-bind="css: { 'btn btn-default': true, 'btn-primary': $root.inEditMode() }, click: $root.setEditMode, enable: $root.articleSelected()">Edit</a>
但是,其中一个子视图本身具有一个子子视图,该子子视图使用自定义绑定和用于构建的模板,因为它是树形视图,并且需要能够递归构造布局。
子视图代码如下:
<div id="fancytree" data-bind="groupTree: treeGroups">
<!--<ul data-bind="template: { name: 'itemTmpl', foreach: treeGroups }, groupTree: {}"></ul>/-->
</div>
模板是:
<script id="itemTmpl" type="text/html">
<!-- Template used in labtool for tree-->
<li>
<span>
<span data-bind="text: name" />
</span>
<ul data-bind="template: { name: 'itemTmpl', foreach: children }"></ul>
</li>
</script>
定制绑定是:
ko.bindingHandlers.groupTree = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var tm = valueAccessor();
var tmUnwrapped = tm();
$(element).fancytree({
minExpandLevel: 1,
source: tmUnwrapped,
lazyload: function (e, data) {
data.result = datacontext.getGroupChildren('1111');
},
activate: function (event, data) {
var node = data.node;
var tg = rootVm.selectedGroupId();
alert(node.title);
},
})
}
所以我的问题是,我无法从.net的日子中得到我认为的“全局变量”,这在我称为“ selectedArticle”的顶级根视图模型中是可以观察到的。当用户单击树视图节点时,将激活“激活”功能,并使用正确的详细信息弹出警报,而我只是希望能够将该值放入我的根视图模型中的可观察值中,实际上是两个从自定义绑定处理程序的绑定上下文升级。
这一定是别人做的吗?我一直用谷歌搜索,直到脸色发青,但显然我缺少我需要的关键词或概念。在自定义绑定“激活”功能的伪代码中,我只希望能够输入“ root.selectedArticle = node.title”之类的内容,但是显然root不能以这种方式使用,所以这就是我无法解决的地方!
您可以从绑定上下文(函数的第五个参数init/update
)访问它:
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext)
{
bindingContext.$data // current data
bindingContext.$parent // parent binding
bindingContext.$parents[0] // same to bindingContext.$parent
bindingContext.$parents[1] // parent of parent
bindingContext.$parentContext // same with bindingContext but from parent
bindingContext.$root // you root View Model
// ...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句