Knockoutjs:动态内容和applyBindings(Knockoutjs: dynamic content and applyBindings)

编程入门 行业动态 更新时间:2024-10-15 02:28:07
Knockoutjs:动态内容和applyBindings(Knockoutjs: dynamic content and applyBindings)

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

<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> !

视图模型:

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节点上完成,但是如何在我的设置中访问这些节点?

I am "dynamically" populating my page like this:

<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);

A particularity is that template names are dynamic. It seems to work like this (you can try it on http://jsfiddle.net/hPQNx/ ), but I wonder if I'm doing things correctly. Some template features like root or parent don't seem to be working.

Should I manually re-call applyBindings at some point ? I have seen this must be done on the related DOM nodes, but how can I access those nodes in my setup ?

最满意答案

我在你的视图模型中添加了一个属性,并展示了如何添加一个root属性并用$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>
! 
  
 

I added a property to your view model and showed how you can add a root property and reference it with $root and $parent can work here in this fiddle.

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>
! 
  
 

更多推荐

template,applyBindings,viewModel,data-bind,电脑培训,计算机培训,IT培训"/> <me

本文发布于:2023-07-14 14:33:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1105118.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:动态   内容   Knockoutjs   content   dynamic

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!