2012-02-20 3 views
2

私のビューモデルは観測可能なプロパティがほとんどなく、ここで説明したカートの例のように、ドロップダウンからの値を格納するために使用しています。ko.obervableが2回更新されています

knockoutjs 'Cart editor' example questions

は、ここに私のhtml 1)各セクションのboardtest 2)選択スコアを選択します

<select data-bind="options :$parent.boardTestData,optionsText:'name', value:boardTestSelected, optionsCaption:'Select Test' ">  </select> 
    <div data-bind="visible : boardTestSelected, foreach : boardTestSelected() ? boardTestSelected().testParts : null"> 
    <div> 
     <span data-bind="text: boardTestPartName"></span> 
     <select data-bind="options: testPartValues, optionsText:'BoardTestPartValue', 
     value: $parent.testPartValueSelected> </select> 
    </div> 
    </div> 

マイビューモデルと)(

$ parent.boardTestDataがobervablearrayでありタイプtestPartsの配列 とtestPartsには別の配列があります。testPartValues []

class @BoardTestData 
    constructor :(data) -> 
     @id = data.Id 
     @name = data.Name 
     @testParts = [] 
     @testParts.push new TestParts data.Name,d for d in data.TestParts 

class @TestParts 
    constructor:(partData) -> 
     @testPartValues = [] 
class @TestPartValues 
    constructor:(partValues) ->     
     @BoardTestPartValueId= partValues.Id 
     @BoardTestPartValue = partValues.Value  


@boardTestSelected = ko.observable() 
@testPartSelected = ko.observable() 
@testPartValueSelected = ko.observable() 

私はtestPartValueSelectedに加入していると、その正しい値で二回最初に実行し、その後witjヌル値であるので、私はnullに@testPartValueSelectedまたは未定義の設定のthats何かがあると思います。

  • ただ一つのアイテムは、ネストされたドロップダウン

のためのforeachであった場合に、それは何とか正常に動作し、私はこれをやっている間、私が持っている他の質問は、それが選択された値をプッシュすることが可能ですドロップダウンから配列またはobersvable配列()へ?

は、この問題のためのJSフィドルを設定します。 http://jsfiddle.net/paisley/W82yE/11/

+0

適切なjavascriptの例を教えてください。私は、そのコードが何であるか知らないが、それは私に多くのjavascriptのようには見えません:(実際にコーヒースクリプト – soniiic

+0

その。 – Neel

答えて

0

あなたが@BoardTestData値を与えた場合、サブスクリプションがヒットしました。これはノックアウトがドロップダウンのvalueを最初の値に自動的に割り当てるためです。値がtestpartvalueselectedという変数に設定されています。

後でもう一度新しいko.observable()として設定してください。ノックアウトは再びその変化を検出して契約にヒットします。あなたがドロップダウンリストに値を割り当てると

は、手動による「選択」の値を設定する必要はありません。それはすでにあなたのために設定されています。

+1

OK、私は上記のコードで言及した3つのクラスがちょうど静的データときのためのものであるので、ページが読み込ま初めて。UIは、あなたがboardtestを追加することができますし、すべてのものは別々のクラスでの世話をし、そのクラスは、ドロップダウンの値を格納するために、上記の3つのobersavbleプロパティを定義している。 ので、あなたがboardtestを選択すると、ネストされたドロップダウンの値を選択すると、boardTestSelectedを設定してサブスクライブを開始することが期待されます。testPartValueSelectedは設定されていますが、その直後はnullに設定されています。 – Neel

関連する問題