ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript-Knockoutjs:动态内容和applyBindings

2019-12-02 00:38:21  阅读:233  来源: 互联网

标签:knockout-js javascript jquery


我是“动态地”填充我的页面,如下所示:

<script type="text/html" id="ContainerTemplate">
  <span data-bind="template: {
                     name: contentTemplate,
                     data: contentData }"></span>
</script>

<script type="text/html" id="fooTemplate">
  <span data-bind="text: barAttribute"></span>
</script>

<button data-bind="click: complete">complete</button>

Hello
<span data-bind="template: { name: 'ContainerTemplate', foreach: myContents }"></span>
!

ViewModel:

var viewModel = {
    myContents: ko.observableArray([]),
    complete: function() {
        viewModel.myContents.push({
            contentTemplate:'fooTemplate',
            contentData:{barAttribute:'world'}});
    }
};

ko.applyBindings(viewModel);

特殊之处在于模板名称是动态的.它看起来像这样工作(您可以在http://jsfiddle.net/hPQNx/上尝试一下),但是我想知道自己是否做对了.某些模板功能(例如root或parent)似乎不起作用.

我是否应该在某个时候手动调用applyBindings?我已经看到必须在相关的DOM节点上完成此操作,但是如何在设置中访问这些节点?

解决方法:

我在视图模型中添加了一个属性,并展示了如何添加根属性并使用$root引用它,而$parent可以在此工作中工作.

var viewModel = {
    a: ko.observable('foo'),
    myContents: ko.observableArray([]),
    complete: function() {
        viewModel.myContents.push({
            contentTemplate: 'fooTemplate',
            b: 'goo',
            contentData: {
                barAttribute: 'world'
            }
        });
    }
};

ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.0.0/knockout-min.js"></script>
<script type="text/html" id="ContainerTemplate">
  <span data-bind="template: {
                     name: contentTemplate,
                     data: contentData }"></span>
</script>
      
<script type="text/html" id="fooTemplate">
  <span data-bind="text: barAttribute"></span>
  <div data-bind="text: $root.a"></div>
  <div data-bind="text: $parent.b"></div>
</script>

<button data-bind="click: complete">complete</button>

Hello
<span data-bind="template: { name: 'ContainerTemplate', foreach: myContents }"></span>
!

标签:knockout-js,javascript,jquery
来源: https://codeday.me/bug/20191201/2084470.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有