2015-11-01 107 views
1

我有一個對象的列表,我循環併爲他們創建單選按鈕,然後我想存儲在一個可觀察的被選中的對象,但我不知道如何做到這一點。這個小提琴就是我試圖做的事情的例子:jsfiddle.net/whx96806/,但它不起作用。KnockoutJS檢查與單選按鈕綁定

<div data-bind="foreach: items"> 
<input type="radio" name="test" data-bind="checkedValue: $data, checked: $root.chosenItem" /> 
<span data-bind="text: itemName"></span> 
</div> 
<div><p>You have selected: <span data-bind="text:JSON.stringify(chosenItem())"></span></p></div> 
<button data-bind="click:print">Print</button> 

而且JS代碼:

function ViewModel() { 
    items= ko.observableArray([ 
    { itemName: 'Choice 1' }, 
    { itemName: 'Choice 2' } 
    ]); 
    chosenItem= ko.observable(); 

    print = function() { alert(chosenItem()); }; 

}; 

var vm = new ViewModel(); 
ko.applyBindings(vm); 

回答

0

問題是我忘了在我的視圖模型中使用'this',這應該工作:

function ViewModel() { 
    this.items= ko.observableArray([ 
    { itemName: 'Choice 1' }, 
    { itemName: 'Choice 2' } 
    ]); 
    this.chosenItem= ko.observable(); 

    print = function() { alert(chosenItem()); }; 

}; 

var vm = new ViewModel(); 
ko.applyBindings(vm); 

繼承人的小提琴:http://jsfiddle.net/whx96806/2/

2

這裏是小提琴:http://jsfiddle.net/whx96806/1/

請試試這個片段,並看看是否有幫助:

var ViewModel = {  
    items : ko.observableArray([ 
    { itemName: 'Choice 1' }, 
    { itemName: 'Choice 2' } 
    ]), 
    chosenItem : ko.observable(), 

}; 

ko.applyBindings(ViewModel); 
+0

解釋下投票伴侶嗎? – Ash

+0

你的代碼片段工作正常,但是我的代碼存在問題,那就是我在聲明變量thx時沒有使用這個關鍵字。 –