我一直在使用淘汰赛并熟悉’foreach’绑定,我可以使用别名’as’:
<ul data-bind="foreach: { data: categories,as: 'category' }"> <li> <ul data-bind="foreach: { data: items,as: 'item' }"> <li> <span data-bind="text: category.name"></span>: <span data-bind="text: item"></span> </li> </ul> </li> </ul>
‘with’绑定有类似的东西吗?我已尝试使用以下代码但收到错误:
Uncaught ReferenceError: Unable to process binding “with: function (){return { data:$root.profileUser,as:’profile’} }”
<div data-bind="with: { data: $root.profileUser,as: 'profile' }"> <form class="form-horizontal"> <div class="form-group"> <label for="inputName" class="col-sm-2 control-label">Preferred Name</label> <div class="col-sm-10"> <input type="text" data-bind="textInput: profile.PreferredName" class="form-control" id="inputName" placeholder="Preferred Name"> </div> </div>
解决方法
正如您所演示的那样,foreach的as选项会创建一个持久性别名,您可以在子上下文中引用该别名.如果这就是你所需要的,那么在下一个版本的Knockout(3.5.0)中会有一个新的绑定,名为let.
您可以通过将绑定包含为自定义绑定来使用它:
ko.bindingHandlers['let'] = { init: function(element,valueAccessor,allBindings,vm,bindingContext) { // Make a modified binding context,with extra properties,and apply it to descendant elements var innerContext = bindingContext.extend(valueAccessor); ko.applyBindingsToDescendants(innerContext,element); return { controlsDescendantBindings: true }; } }; ko.virtualElements.allowedBindings['let'] = true;
用法:
<div data-bind="let: { profile: $root.profileUser }"> ... </div>