我正在尝试使用knockoutjs自定义绑定来创建组件。这可能不是一个好主意,如果有其他方法可以做同样的事情,我愿意接受替代方案。
我们的想法是设置一个元素的自定义绑定,以便根据传递给绑定的数据填充元素内容。
例如(在jade模板中),我会写:
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
绑定绑定到span内容。我的问题是我不知道在theDataThatWasPassedToTheBinding
放什么,所以它等于作为绑定值传递的$data.somePropertyHoldingSomeData
。
我试过了:
$( "<span data-bind='text: " + valueAccessor().value + "'/>" ).appendTo( element );
和
$( "<span data-bind='text: " + ko.unwrap( valueAccessor() ).value + "'/>" ).appendTo( element );
这可能吗?
答案 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})
}
}