2013-02-20 95 views
0

我有一個Observable數組,其中使用映射插件我映射它從服務器的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。

如何實現這一目標?我試圖讓category屬性是可觀察的,但這沒有任何作用。

我必須補充說我剛開始使用Knockout,並且我沒有意識到它是全功能的。

回答

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請將它作爲正確的答案,你知道嗎? :) – 2013-02-20 12:32:56

+0

是啊,但:「你可以接受你自己的答案在2天內」,因爲我試圖:) – Leth 2013-02-20 13:48:01

+0

啊,是的,我忘記了這一點,對不起! – 2013-02-20 13:50:39