2013-10-24 50 views
1
<select data-bind='foreach: theOptions'> 
    <option data-bind='text: name, value: $root.watchThis().something'></option> 
</select> 
You have selected <p data-bind="text: watchThis().something"></p> 

Json model. 
<p data-bind="text: ko.toJSON(watchThis)"></p> 

選項正被示出,但是當我改變值的相對觀察到的不更新。 更多代碼:KnockoutJS選項結合,無法在父上下文設定值

function FooModel() { 
    this.something = ko.observable(); 
} 

function VM() { 
    var self = this; 
    self.watchThis = ko.observable(new FooModel()); 
    self.theOptions = ko.observableArray(); 

    self.theOptions([ 
     {id:1, name: 'foo'}, 
     {id:2, name: 'bar'}, 
     {id:3, name: 'baz'} 
    ]); 
} 
ko.applyBindings(new VM()); 

我也試過

<option data-bind='text: name, value: $root.watchThis().something'></option> 
<option data-bind='text: name, value: $root.watchThis.something'></option> 
<option data-bind='text: name, value: $parent.watchThis().something'></option> 

什麼,似乎最壞的打算,如果我明確初始化這樣的價值

function FooModel() { 
    this.something = ko.observable(2); 
} 

一切都看起來不錯,但是當我切換選項可觀察不更新。

JSFiddle here

的問題是:如何更新使用所選值選項的外部環境可觀察到的?

+1

根據您當前的問題,這是很難說什麼是你想達到的,什麼是不工作...你可以重新制定你的問題和/或添加什麼是你想要做更詳細?你需要的是這樣的:http://jsfiddle.net/Wqzwh/? – nemesv

+0

是啊!這正是我所追求的。無論如何,我會更新問題,謝謝。 – brazorf

回答

4

當綁定一個select元素,你必須使用options方向,不foreach

<select data-bind="options: theOptions, 
        optionsText: 'name', 
        optionsValue: 'id', 
        value: watchThis().something"> 
</select> 

Documentation

+1

可以使用的foreach,你只是沒有指定的選項綁定和移動值綁定到選擇標籤 –

+0

謝謝隊友,我錯過的選擇/選項綁定值的應有之義。 – brazorf