2013-10-27 102 views
2

我正嘗試使用knockoutjs自定義綁定來創建組件。這可能不是一個好主意,如果還有其他方法可以做同樣的事情,我可以選擇。將自定義綁定的值傳遞給在自定義綁定中添加的DOM元素

這個想法是設置一個元素的自定義綁定,以便元素內容根據傳遞給綁定的數據來填充。

例如(在玉模板),我會寫:

div(data-bind="keyValueEditor: $data.somePropertyHoldingSomeData") 

而且我有以下的(簡化的問題)自定義綁定:

ko.bindingHandlers.keyValueEditor = { 
    init: function (element, valueAccessor) { 
     var value = valueAccessor(); 

     var valueUnwrapped = ko.unwrap(value); 

     $("<span data-bind='text: theDataThatWasPassedToTheBinding.value'/>").appendTo(element); 
     } 
    }, 
    update: function (element, valueAccessor) { 
    } 
}; 

這裏value是可觀察到的那我想使用text綁定綁定到跨度內容。我的問題是,我不知道要在theDataThatWasPassedToTheBinding中放什麼,因此它等於$data.somePropertyHoldingSomeData,它作爲綁定的值傳遞。

我想:

$("<span data-bind='text: " + valueAccessor().value + "'/>").appendTo(element); 

$("<span data-bind='text: " + ko.unwrap(valueAccessor()).value + "'/>").appendTo(element); 

這可能嗎?

+0

不知道誰-1'd,這是一個良好的書面問題。 (謹慎詳細,downvoter?) – Jeroen

+0

曼努埃爾,如果​​你有機會創建一個小提琴它可能會更容易幫助你解決這個問題。 –

回答

1

您可以使用功能
ko.applyBindingsToNode(node, bindings, viewModel, bindingAttributeName)

ko.bindingHandlers.keyValueEditor = { 
    init: function (element, valueAccessor) 
    { 
     var somePropertyHoldingSomeData = valueAccessor(); 
     var span = $("<span>"); 
     span.appendTo(element); 
     ko.applyBindingsToNode(span[0], {text: somePropertyHoldingSomeData.value}) 
    } 
} 

JSFiddle DEMO

相關問題