1

複数のサブビュー モデルで構成されるウィザードを作成しています。

1 つのビューモデル (ステップ 3) は、このノックアウト フォームのコピーであり、2 つのラジオ ボタン グループで構成されます。最初のグループは、2 番目のグループで使用できるオプションを制御します。

このサブビューで使用するとラジオボタンをバインドするのに問題がありますが、スタンドアロンのビューモデルとして機能しますが、サブビューとして使用するとself.availableDatabasesko.computed 関数が呼び出されないようです (つまり、それはビューはビューモデルにバインドされていないようです)。

select db ラジオ グループは、次のコードで子のビュー モデル availableDatabases にバインドされます。

<h1>Select OS:</h1>
<div data-bind="foreach: os" >
    <div>
        <input type="radio" name="os" data-bind="attr: {value: name}, checked: $root.selectedOs" />
        <span data-bind="text: name"></span>
    </div>    
</div>
<h1>Select DB:</h1>
<div data-bind="foreach: availableDatabases" >
    <div>
        <input type="radio" name="db" data-bind="attr: {value: name}, checked: $root.selectedDb" />
        <span data-bind="text: name"></span>
    </div>    
</div>

ウィザードコード全体のフィドルはこちらです。サブビューモデルへの統合で何が間違っているのでしょうか?

4

1 に答える 1

3

$parentの代わりに使用する必要があります$root

$root、あなたの場合に applyBindings 呼び出しで渡すものをメイン ビュー モデルに参照しますViewModelが、 にselectedOsおよびselectedDbプロパティがありますConfigureModel

したがって$parent、foreach で「1 レベル上に移動」してプロパティにアクセスする必要があります (または、$root.configureModel().selectedOs1 レベル上に移動して 1 レベル下に移動するために使用できますconfigureModel) 。

<h1>Select OS:</h1>
<div data-bind="foreach: os" >
    <div>
        <input type="radio" name="os" data-bind="attr: {value: name}, 
               checked: $parent.selectedOs" />
        <span data-bind="text: name"></span>
    </div>    
</div>
<h1>Select DB:</h1>
<div data-bind="foreach: availableDatabases" >
    <div>
        <input type="radio" name="db" data-bind="attr: {value: name}, 
               checked: $parent.selectedDb" />
        <span data-bind="text: name"></span>
    </div>    
</div>

JSFiddle のデモ。

これらのバインディング コンテキスト プロパティについては、ドキュメントを参照してください。

于 2013-07-17T19:16:59.083 に答える