3
我有一个淘汰赛的模板是这样的:如何获取嵌套绑定中的父模板绑定值?
<script type="text/html" id="list">
<ul data-bind="foreach: items">
<li data-bind="{text: name}"></li>
</ul>
</script>
,我使用的是这样的:
<div data-bind="
template: {name: 'list', data: itemList},
myBinding: {itemType: 'foo'}
"></div>
我有一个myBinding
自定义绑定处理程序:
ko.bindingHandlers.myBinding = {
init: function(element, valueAccessor) {
var bindingValue = valueAccessor();
alert (bindingValue.itemType); // alerts "foo"
// now set up a jQuery click handler
$(element).on("click", "li", listItemClickHandler);
}
};
和事件处理程序:
function listItemClickHandler() {
var bindingContext = ko.contextFor(this);
alert("bindingValue.itemType ???");
});
有没有办法让父模板的itemType
,如自定义绑定提供,单击处理程序虽然淘汰赛的bindingContext
?
- 没有加入一些虚假的CSS类像
.type-foo
到<ul>
(这就是我现在做的)。 - 在
myBinding.init()
期间没有在数组项目中存储"foo"
。 - 没有对事件处理程序进行内联以利用闭包变量(
bindingValue
)。 - 不使用jQuery的
event.data
工具。我可以做到这一点,但我想从淘汰赛的结合上下文中检索它,除非这是不可能的。
谢谢。我会选择#2,这正是我需要的。 (现在没有值传递给'myBinding'了,是否有一个约定是什么?'= data-bind“{myBinding:true}”'?) – Tomalak
你可以通过'{}'或'true '或者''''给它。没有真正的约定。否则,您可以删除绑定并将其连接到外部。如果你想让你的绑定更通用,那么你可以将'listItemClickHandler'传递给它来决定连接什么。 –
我是否可以截取'template'绑定的init函数并完全摆脱我的自定义绑定? – Tomalak