Вложенные шаблоны - PullRequest
       18

Вложенные шаблоны

0 голосов
/ 29 августа 2011

У меня есть следующий код:

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.Дело в том, что я не хочу, чтобы это работало без показа соответствующей собственности.Я просто хочу заставить работать вложенный шаблон.

1 Ответ

1 голос
/ 29 августа 2011

Это кажется ближе к тому, что вы хотите сделать:

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

См. Также эту скрипку

...