2013-12-04 5 views
0

Мой проект - создать сетку дат, основанную на моем представленииМодель ниже. Код работает, но мне интересно выяснить, есть ли более простой способ добраться до моего первого внутреннего массива «CalendarDateBlocks».Упрощенный нокаут вложенных петель

// data = products.productUnits.CalendarDateBlocks 
function productViewModel (data) { 
    var self = this; 
    window.viewModel = self; 
    self.productsList = ko.observable(data); 
} 

Нокаут HTML связывании В таблице

<table> 
    <tr> 
     <th>Product</th> 
     <th>Unit</th> 
     <!-- ko foreach: window.viewModel.productsList--> 
      <!-- ko if: ($index()===0)--> 
       <!-- ko foreach: ProductUnits --> 
       <!-- ko if: ($index()===0)--> 
        <!-- ko foreach: CalendarDateBlocks --> 
         <th data-bind="text: BlockDate"></th> 
        <!-- /ko --> 
       <!-- /ko --> 
       <!-- /ko --> 
      <!-- /ko --> 
     <!-- /ko --> 
    </tr> 
</table> 

JSon код с сервера

{ 
    "productsList":[ 
     { 
     "ProductId":1, 
     "Title":"Standard", 
     "ImageGalleryId":10, 
     "ProductUnits":[ 
      { 
       "ProductUnitId":1, 
       "ProductId":1, 
       "CalendarBlocks":[ 
        { 
        "ProductId":1, 
        "ProductUnitId":1, 
        "BlockDate":"09/01/2013" 
        }, 
        { 
        "ProductId":1, 
        "ProductUnitId":1, 
        "BlockDate":"09/02/2013" 
        } 
       ] 
      }, 
      { 
       "ProductUnitId":2, 
       "ProductId":1, 
       "CalendarBlocks":[ 
        { 
        "ProductId":0, 
        "ProductUnitId":0, 
        "BlockDate":"09/01/2013" 
        }, 
        { 
        "ProductId":0, 
        "ProductUnitId":0, 
        "BlockDate":"09/02/2013" 
        } 
       ] 
      }, 
      { 
       "ProductUnitId":3, 
       "ProductId":1, 
       "CalendarBlocks":[ 
        { 
        "ProductId":0, 
        "ProductUnitId":0, 
        "BlockDate":"09/01/2013" 
        }, 
        { 
        "ProductId":0, 
        "ProductUnitId":0, 
        "BlockDate":"09/02/2013" 
        } 
       ] 
      }, 
      { 
       "ProductUnitId":4, 
       "ProductId":1, 
       "CalendarBlocks":[ 
        { 
        "ProductId":0, 
        "ProductUnitId":0, 
        "BlockDate":"09/01/2013" 
        }, 
        { 
        "ProductId":0, 
        "ProductUnitId":0, 
        "BlockDate":"09/02/2013" 
        } 
       ] 
      } 
     ] 
     } 
    ] 
}; 
+0

Почему вы используете $ индекс() == = 0 если утверждение там? –

+0

Мы создаем сетку календаря, первая строка - это голова, которая содержит эти столбцы [Product, Unit, Date, Date, Date и т. Д.], Каждый Продукт содержит несколько ProductUnits, и каждый элемент содержит несколько BlockDates. Для заголовка нам нужно только получить первую строку дат. препятствует тому, чтобы цикл проходил через него более одного раза. Что приносит смысл и причина, по которой я опубликовал вопрос, может ли это упростить? – phanf

+0

Если ответ, который я уже разместил, не делает то, что вы пытаетесь сделать, создайте скрипку, чтобы мы могли понять, что вы пытаетесь добиться. –

ответ

0

Это должно работать

<!-- ko foreach: window.viewModel.products.ProductUnits.CalendarDateBlocks --> 
    <th data-bind="text: BlockDate"></th> 
<!-- /ko --> 
+0

Я создал модифицированную версию с предлагаемым решением, которое не работает. http://jsfiddle.net/X65Dm/1/ – phanf

+0

Это сообщение с консоли браузера. ТипError: window.viewModel.productsList.ProductUnits не определено – phanf

+0

Не использовать window.viewModel. Используйте productsList(). ProductUnits или w/e. –

Смежные вопросы