2013-02-20 1 views
0

У меня есть наблюдаемый массив, в котором с помощью плагина сопоставления отображается карта json с сервера. Структура JSON как это:Обновление шаблона при изменении выбора из шаблона синтаксического анализа

Data: [{ 
    NumberOfRooms: 5, 
    Category: 1 
    }, 
    { 
    TruckDoorsNo: 5, 
    Category: 2 
    }] 

Этот JSON содержит данные о различных типах объектов и из категории ценности мы определяем, что показать и что не показывать в моем шаблоне с помощью:

<div data-bind="foreach: Buildings"> 
<!-- ko if: Category === 1 --> 
    <input type="text" data-bind="value: NumberOfRooms" /> 
    <select data-bind="value: Category"> 
     <option value="1">Category1</option> 
     <option value="2">Category2</option> 
    </select> 
<!-- /ko --> 
<!-- ko if: Category === 2 --> 
    <input type="text" data-bind="value: TruckDoorsNo" /> 
    <select data-bind="value: Category"> 
     <option value="1">Category1</option> 
     <option value="2">Category2</option> 
    </select> 
<!-- /ko --> 
</div> 

Проблема в том, что категория каждого элемента может быть изменена из шаблона синтаксического анализа и мы хотим обновить шаблон, когда это изменение произойдет.

У меня нет модели нокаута для этой модели ViewModel, и я сопоставляю json непосредственно с сервера.

Как достичь этого? Я попытался сделать свойство категории наблюдаемым, но это ничего не делает.

Я должен добавить, что я только начал использовать нокаут, и я не знаю, что это полная мощность.

ответ

1

Я нашел ответ мой шаблон был неправ в первую очередь:

вместо:

<!-- ko if: Category === 2 --> 
<!-- /ko --> 

правильный путь является:

<!-- ko if: Category() == 2 --> 
<!-- /ko --> 

Я сделал свойство Категория наблюдаемым как это:

ko.utils.arrayForEach(viewModelBuilding.Buildings(), function(item) 
    { 
     item.Category = ko.observable(item.Category); 
    }); 
+0

Вы можете m вы считаете, что это правильный ответ? :) –

+0

да, но: «Вы можете принять свой ответ через 2 дня», потому что я пытался :) :) – Leth

+0

А, да, я забыл об этом, извините! –