我的html中有div,如下所示..
<div data-helper="my helper text1">help</div>
我的javascript中还有一个数组
self.helpers = [
{ name: ' abc ', helper: ' my helper text1 ' },
{ name: ' def ', helper: ' my helper text2 ' },
{ name: ' xyz ', helper: ' my helper text3 ' }
];
使用knockoutjs,我想将帮助器绑定到数据助手文本。
基本上我需要一些可以将下面的代码转换为必要的html代码的东西..
<div databind="helper:helpers.helper">help</div>
我尝试创建自定义绑定处理程序但不能..
真心感谢任何帮助。
由于
更新:我在没有查看代码的情况下接受了答案,并且必须重新打开问题。 我需要线条如下所示..
<div data-helper="my helper text1">help</div>
因此,div data-bind:text可能无法正常工作
我尝试如下,但没有成功..
<!-- ko foreach: helpers -->
<div data-bind="attr: {data-helper:helper}">help
</div>
<!-- /ko -->
答案 0 :(得分:0)
有两种方法可以实现此功能:custom component和custom binding。您可以从下面的简短示例开始:
ko.components.register('my-component', {
viewModel: {
createViewModel: function(params, componentInfo) {
return {
helpers: params.helpers
};
}
},
template: { element: 'my-component-template' }
});
ko.bindingHandlers.helper = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var values = valueAccessor(),
$templateHtml = $('#my-component-template').text(),
$element = $(element).append($templateHtml);
var childContext = bindingContext.createChildContext(values);
ko.applyBindings(childContext, $element.children()[0]);
return { controlsDescendantBindings: true };
}
};
ko.applyBindings([
{ name: ' abc ', helper: 'my helper text1' },
{ name: ' def ', helper: 'my helper text2' },
{ name: ' xyz ', helper: 'my helper text3' }
]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script type="text/html" id="my-component-template">
<div>
<!-- ko foreach: helpers -->
<div data-bind="text: helper, attr: { 'data-helper': helper }">
</div>
<!-- /ko -->
</div>
</script>
<div>Component:</div>
<my-component params="helpers: $data"></my-component>
<div>Custom binding:</div>
<div data-bind="helper: { helpers: $data }"></div>
自定义组件由注册码(“ko.components.register('my-component'...”)和模板(“...”)组成。
我添加了自定义绑定示例。您可以查看documentation了解详情。
你应该用引号包装attr名称:
<div data-bind="text: helper, attr: { 'data-helper': helper }">
</div>