2015-11-01 106 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时没有使用这个关键字。 –