2013-06-11 177 views
0

我有一個淘汰賽observable映射到JavaScript中的選擇。基於選擇值,它對div有一個「with」綁定。淘汰賽更新可觀察不與

我需要在javascript中設置observable的值,問題是div永遠不會顯示。下面是詳細信息:

可觀察被綁定到一個選擇在用戶界面中,並且所選擇的值是一個對象:

<select data-bind="options: Offers, 
        optionsText: 'Offer', 
        optionsCaption: 'Please Choose', 
        value: SelectedOffer"> 
</select> 

當用戶選擇了一個值,我具有結合一個div數據使用「與「這顯示了下選擇:

<div data-bind="with: SelectedOffer"> 
    .... 
</div> 

現在,當我選擇在UI值這個工作完全正常。

當用戶選中一個箱子,我在javascript中設置觀察到的價值,那也可以工作:

event.SelectedOffer(myOffer); 

我可以看到我在選擇設置的報價。問題是使用「with」綁定的div永遠不會顯示出來。如果我從選擇中手動選擇,那麼它再次正常工作。

我已經嘗試了許多不同的事情讓ko知道價值已經改變,它需要向我展示div,但似乎沒有任何工作。我已經使用

valueHasMutated 
valueWillMutate 
ko.utils.triggerEvent 
$(myselect).change() 

幫助!

+1

很難跟隨你的問題,關於什麼不工作。我無法複製你的問題:http://jsfiddle.net/ww9dK/。你可能會嘗試更新/創建一個顯示你的問題的jsfiddle? – nemesv

+0

感謝您的評論並設置了jsfiddle。我更新了jsfiddle,現在它重現了這個問題。 http://jsfiddle.net/ww9dK/5/。正如你所看到的那樣,正如你所預料的那樣,這比我在最初的問題中陳述的要多。我實際上是把清單轉出來。在我更新的jsfiddle代碼片段中,它顯示它可以很好地與ui一起使用,但對於JavaScript無法正常工作。 –

+0

好的,我的問題在這裏轉載:jsfiddle.net/ww9dK/13 –

回答

0

好的,這是固定的!感謝您的迴應,特別是nemesv的評論和建立jsfiddle。

http://jsfiddle.net/ww9dK/14/

var ViewModel = function() { 
var self = this; 
    self.list1 = [{Offer: "Offer1"},{Offer: "Offer2"},{Offer: "Offer3"}]; 
    self.list2 = [{Offer: "Offer4"},{Offer: "Offer5"},{Offer: "Offer6"}]; 

    self.AlternateList = ko.observable(false); 
    self.SelectedOffer = ko.observable(); 
    self.SelectedList = ko.observable(self.list1); 

    self.selectSecond = function() { 

    self.SelectedList(!self.AlternateList() ? self.list2: self.list1); 
    self.SelectedOffer(!self.AlternateList() ? self.list2[0]: self.list1[0]); 
    } 
}; 

底線是我的備選項列表所需的是可觀察到的。感謝真棒同事的幫助解決。 ko.applyBindings(new ViewModel());

0

聽起來就像你你選擇的元素將自動設置SelectedOffer觀察到您的視圖模型上混淆的幾件事情與KO

value:。沒有必要手動設置它,這是我的理解,你認爲你正在使用event.SelectedOffer(myOffer);

如果你只是想更新SelectedOffer當用戶選中的東西,你就必須對自己的選擇框綁定值到不同的觀察到的,然後手動更新您的「真實」價值

我已經設置了http://jsfiddle.net/HLGKf/演示如何設置一個簡單的ViewModel和選擇框,以及使用with:綁定

+0

感謝您的回覆。請參閱http://jsfiddle.net/ww9dK/13/。這再現了我的問題。該問題與切換列表有關。 –

+0

問題在於,您在「已檢查」和「事件」綁定中確實存在爭用條件。 1.該事件正在設置所選報價; 2. AlternateList正在切換; 3.(2)導致列表從選定報價下方更改(您在選擇的第二個功能中出現錯誤!)。選擇甚至出現在框中,這是由一些狀態錯誤造成的。 最好不要對淘汰賽嘗試更新可觀察量的順序做出任何假設。您在調用selectSecond時做出這個假設,然後才知道列表已被檢查的綁定更改。 – matrix10657

+0

我絕對認爲在你的選項綁定中沒有這個條件是一件好事,但僅僅是爲了說明我的觀點:http://jsfiddle.net/kWTMx/2/在這裏我已經將selectSecond調用移動到一個函數保證在備用列表更新後,從您的'事件'綁定在複選框上 – matrix10657