2013-12-11 31 views
0

我正在使用布爾值供電的下拉控件。我有一個由查找數據集數組(數值和文本屬性)組成的視圖模型,以及一個包含布爾值的數據集,該布爾值需要與數組中選定的值對齊。因此,viewmodel中的數據表示一個實際的數據項,而lookupdata實質上表示值對的映射。對於每個僅包含與其相關的信息的數據項目來說,這兩個項目確實需要保持獨立。敲下來 - 使用布爾值

我已經能夠得到一個示例工作,因爲它存在於viewmodel中並將其放置在viewmodel中的數據對象外部,但是我無法在viewmodel內部使其工作。我創建了一個JSFiddle,它在功能上展示了我希望用戶看到的內容,以及我擁有它所屬數據的位置,但下拉不能按預期工作。

活動映射爲true和Inactive映射爲false。它們之間的切換也會影響屏幕上的真/假。

http://jsfiddle.net/rodearly/xF78A/11/

<div data-bind="with: data"> 
<select data-bind="options: $root.lookupData.status, optionsText: 'text', optionsValue: 'value', value: IsActive"></select> 
<label>Value: </label> 
<span data-bind="text: IsActive"></span> 
</div> 

<div>Alternative</div> 
<div> 
<select data-bind="options: lookupData.status, optionsText: 'text', optionsValue: 'value', value: IsActive"></select> 
<label>Value: </label> 
<span data-bind="text: IsActive"></span> 
</div> 

function Item(id, name) { 
this.id = ko.observable(id); 
this.name = ko.observable(name); 
} 

function getLookupData() { 
var lookupData = {}; 
lookupData.status = [{ 
    text: "Active", 
    value: true 
}, { 
    text: "Inactive", 
    value: false 
}]; 

return lookupData; 
} 


CreateImplantEditViewModel = function (data, lookupData) { 
var vm = {}; 

vm.data = ko.observable(data); 

vm.IsActive = ko.observable(false); 

vm.lookupData = {}; 
vm.lookupData.status = ko.observableArray(lookupData.status); 

return vm; 
}; 

debugger; 

var editImplantVm = CreateImplantEditViewModel({ 
    IsActive: false 
}, 
getLookupData()); 

ko.applyBindings(editImplantVm); 

感謝您的幫助,

〜大衛

回答

0

這裏的問題實際上是布爾值被轉換爲字符串值。爲了使其發揮作用,值必須是字符串或數字。

0

如果我理解你正在試圖做的事情,你的問題就在於要傳遞到數據'CreateImplantEditViewModel'構造函數。您需要創建IsActive作爲可觀察到的,否則它永遠不會更新:

var editImplantVm = CreateImplantEditViewModel({ 
    IsActive: ko.observable(false) 
}, 
getLookupData()); 

我已經更新了你的jsfiddle,並且兩個下拉菜單現在更新其相關的文本結合,當你改變所選的選項。