Я пытаюсь использовать шаблоны KO для синтаксического анализа файла JSON (см. Здесь) в несколько симпатичных макетов сетки .. ( думаю, что это похоже на макеты каменной кладки / изотопов) .. каждый раздел шаблона будет иметь прямоугольники и квадраты разного размера внутри, но общий шаблон соответствует сетке из 5 полей в ширину и 3 элементов в высоту (например)
Учитывая это, то, что я пытался сделать, это обнаружить шаблон, а затем перебрать каждый элемент, если его определенный индекс в итерации загружает либо одиночный, двойной или тройной подшаблон ..
Моя проблема в том, что я не могу заставить его проверить, какой ключ в массиве ViewTestProposal я сейчас использую.
Ниже мой код WIP ..
<div data-bind="template: {if: Template == 'basic2', visible: Template == 'basic2', foreach: ViewTestProposal}">
<div data-bind="template: {if: ViewTestProposal[0], name: 'single'}"></div>
</div>
<script type="text/html" id="single">
<div class="box single">
<p data-bind="text: Artist, attr:{title: Artist}"></p>
</div>
</script>
Я безуспешно пытался изменить раздел if: ViewTestProposal[0]
на with: ViewTestProposal[0]
, if: ViewTestProposal() === 0
и if: ViewTestProposal == 0
.
Заранее благодарим за любую помощь, которую вы можете предоставить
1 ответ
Параметр имени шаблона может быть функцией, которая возвращает имя на основе текущего элемента в массиве (См. Примечание 4). С его помощью вы можете получить доступ к свойству каждого элемента, имеющего имя шаблона:
<div data-bind="template: {
foreach: ViewTestProposal,
name: function(item) {return item.boxsize;}
}"></div>
Если вам нужно использовать индекс элемента в массиве, это доступно, начиная с версии Knockout 2.1 через $index
свойство контекста. Начиная с версии 2.2 (еще не выпущенной [1 октября 2012 г.], но доступна версия-кандидат ) функция имени также может обращаться к объекту контекста. Тогда вы могли бы сделать что-то вроде этого:
<div data-bind="template: {
foreach: ViewTestProposal,
name: function(item, context) {
switch(context.$index()) {
case 0:
return 'single';
case 1:
return 'double';
// etc.
}
}
}"></div>
Очевидно, что сама функция может быть определена в вашей модели представления.
Похожие вопросы
Связанные вопросы
Новые вопросы
templates
Тег templates используется в нескольких контекстах: универсальное программирование (особенно C++) и генерация данных/документов с использованием механизмов шаблонов, веб-шаблон для предварительно разработанной веб-страницы или набор веб-страниц HTML. При использовании этого тега для сложных вопросов по реализации - отмечайте язык кода, на котором написана реализация.
$
вcontext.$index
. Я его сейчас обновил. Если проблема не исчезла, попробуйте проверить журнал консоли браузера на наличие ошибок.