0

html: (ノックアウトmvcを生成)

<select class="span12" data-bind="options : VehicleManufacturers,optionsText : function(item) { return item.Name; },optionsCaption : 'Select Manufacturer...',value : VehicleManufacturer"
id="VehicleManufacturer">
    <option value="">Select Manufacturer...</option>
    <option value="">AUDI</option>
</select>
<span data-bind="with: VehicleManufacturer">
    <span data-bind="text: Name"></span>
</span>

脚本:

var viewModelJs = {
     "VehicleManufacturers": [{
         "Id": 5,
         "Name": "AUDI"
     }],
     "VehicleManufacturer": null
 };
 var viewModel = ko.mapping.fromJS(viewModelJs);
 ko.applyBindings(viewModel);

viewModel.VehicleManufacturer = ko.computed({
    read: function () {
        return viewModel.VehicleManufacturer;
    },
    write: function (manufacturer) {
        // Populate Model list routine
    },
    owner: viewModel
});

JsFiddle: http://jsfiddle.net/ryDjs/2/

私が達成しようとしているのは、この記事に従ってドロップダウンカスケードであり、バインディングを除いて上記のコードで動作しています"with: VehicleManufacturer"。つまり、選択したメーカーの名前は表示されません。

4

2 に答える 2

3

ここでaを使用するのは間違っていると思います(リンク先の記事はダウンしています)。computedAは通常、他の観測可能なプロパティcomputedに依存する値を計算する場合に使用されます。計算された関数は、計算されたもの自体を返すだけです。read

これを作り直して、通常のオブザーバブルを使用し、そのオブザーバブルの変更を手動でサブスクライブします。

var viewModelJs = {
    "VehicleManufacturers": [{
        "Id": 5,
        "Name": "AUDI"
     }],
     "VehicleManufacturer": null
};
var viewModel = ko.mapping.fromJS(viewModelJs);
ko.applyBindings(viewModel);

viewModel.VehicleManufacturer.subscribe(function (manufacturer) {
    alert('dfdf'); 
});

例: http://jsfiddle.net/ryDjs/7/

于 2013-02-22T17:42:25.693 に答える
1

これはあなたが達成しようとしていたものですか?への参照がなかったため、フィドルが壊れていましたko.mapping

アップデート:

Andrew の言うとおりです。s を使用computedして値を書き込むべきではありません。Computeds は読み取り専用にする必要があります。他の値から値を導出する場合に使用します。

ここにあなたの問題を解決する別のフィドルがあります。を使用してcomputedいますが、 を使用してこれを行うこともできますsubscribe

于 2013-02-22T17:05:27.390 に答える