knockoutjs

时间:2016-03-01 06:16:25

标签: knockout.js

我的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 -->

1 个答案:

答案 0 :(得分:0)

有两种方法可以实现此功能:custom componentcustom 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'...”)和模板(“...”)组成。

更新1。

我添加了自定义绑定示例。您可以查看documentation了解详情。

更新2

你应该用引号包装attr名称:

<div data-bind="text: helper, attr: { 'data-helper': helper }">
</div>