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