【问题标题】:Nested templates嵌套模板
【发布时间】:2011-08-29 08:45:04
【问题描述】:

我有以下代码:

function Session(name, index) {
    this.Messages = [];
    this.Name = name;
    this.Index = index;
}

var vm = {};
vm.Sessions = ko.observableArray([new Session("Foo", 0), new Session("Bar", 1)]);

ko.applyBindings();

vm.Sessions()[0].Messages.push("Hello foo");

沿着这个观点:

<div data-bind="template: {name: 'TopTemplate', foreach: Sessions}">
</div>
<script type="text/html" id="TopTemplate">
    <p>
        ${$data.Name}
    <ul data-bind="template: {name: 'NestedTemplate', foreach: Sessions[${$data.Index}]}"></ul>
    </p>
</script>
<script type="text/html" id="NestedTemplate">
    <li>
    ${$data}
    </li>
</script>

如您所见,有一个包含数组的对象。所以我制作了可观察的会话数组,它变得可观察,包括内部属性。我在这里想要的是显示嵌套的“中继器”。

昨天我以某种方式成功执行了这个脚本。没有显示属性名称的有趣之处,即Sessions[${$data.Index}].Messages。不幸的是,我删除了那个测试脚本。

现在我尝试重新创建,但它不起作用。

PS。问题是我不想让它在没有显示相关属性的情况下工作。我只是想让工作成为嵌套模板。

【问题讨论】:

    标签: javascript templates knockout.js multidimensional-array knockout-templating


    【解决方案1】:

    这似乎更接近您想要完成的目标:

    <ul data-bind="template: {name: 'TopTemplate' , foreach: Sessions}"></ul> 
    <script type="text/html" id="TopTemplate">
        <li >    
            <p>${name}</p>
            <ul data-bind=" template: {name:  'NestedTemplate' , foreach: $data} " style="list-style-type:circle;margin-left:15px">
            </ul>
        </li> 
    
    </script>
    <script type="text/html" id="NestedTemplate">         
    {{each(prop, val) $data}}
        {{if $.isArray( val ) }}
            <li>
                <b>${prop}</b>
                <ul  style="list-style-type:square;margin-left:15px" >  
            {{each(index, arrayVal) val}}
                {{each(i, mVal) arrayVal }}
                    <li> 
                        <b>${i}</b>  ${mVal}
                    </li>
                {{/each}}
            {{/each}}
        {{else}}
        <li><b>${prop}</b> : ${val}</li>
        {{/if}}
    {{/each}}     
    </script>
    

    和代码:

    var viewModel = {
        Sessions : ko.observableArray([
            {name:"foo",index: 0, messages:[{body:"Hello foo 1"},{body:"Hello foo 2"}]},
            {name:"bar",index: 1, messages:[{body:"Hello foo 3"},{body:"Hello foo 4"}]}
        ])
    };
    
    // ko magic...
    ko.applyBindings(viewModel);
    

    另见this fiddle

    【讨论】:

    • 对不起。这只是从编辑器复制粘贴时的不准确之处。所有 ID 均已正确放置。
    猜你喜欢
    • 1970-01-01
    • 2012-02-14
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2018-11-08
    相关资源
    最近更新 更多