2013-02-20 93 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