4

マッピング プラグインを使用して、サーバーから送信されるオブジェクトに基づいてクライアント側のビュー モデルを作成しています。オブジェクトは基本的な住所情報です。つまり、住所 1、住所 2、都市、州、郵便番号などです。

ビュー モデルがバインドされたら、ユーザーが住所を変更した場合に Google マップ キャンバスを更新する必要があります。入力された値をチェックし、マップ更新関数を呼び出す計算オブザーバブルを作成しました。以前は、マッピング プラグインを使用していなかったとき、つまりモデルがローカルで定義されていたときにこれが機能していましたが、マッピングを導入すると、計算されたオブザーバブルをビュー モデルに追加できませんでした。

マッピング プラグインのドキュメントの指示に従ってみましたが、計算されたオブザーバブルが更新をトリガーしていません。例のように計算されたオブザーバブルを含む mapModel を呼び出すカスタム マッピングがありますが、更新はありません。

何か案は?

$.getJSON("@Url.RouteUrl("
ContactUs_default ", new { action = "
GetPageModel ",  Model.BusinessID})", function(result) {
    //create map property
    result.Data.Map = null;
    var mapping = {
        'Map': {
            create: function(options) {
                return new mapModel(options.data);
            }
        }
    };

    var viewModel = ko.mapping.fromJS(result.Data, mapping);    

    ko.applyBindings(viewModel);

});

var mapModel = function(data) {
    ko.mapping.fromJS(data, {}, this);

    this.Map = ko.computed(function() {
        var address = "";
        var enteredElements = 0;

        if (this.Address1 != helpText) {
            address += " " + this.Address1;
            enteredElements++;
        }

        if (this.Address2 != helpText) {
            address += " " + this.Address2;
        }

        if (this.City != helpText) {
            address += " " + this.City;
            enteredElements++;
        }

        if (this.State != helpText) {
            address += " " + this.County;
            enteredElements++;
        }

        if (this.PostalCode != helpText) {
            address += " " + this.Postal;
        }
        alert("hi");

        //only upate map if enough data has been entered to give accruate location
        if (enteredElements >= 3) {
            MYMAP.placeMarkers(address);
        }
    }, this);
};​
4

1 に答える 1

2

マッピング プラグインを介してデータを送信すると、すべてのプロパティがオブザーバブルになります。

これは、次のような関数としてアクセスする必要があることを意味します。

    if (this.Address1() != helpText) {
        address += " " + this.Address1();
        enteredElements++;
    }

計算されたオブザーバブル内のオブザーバブルとしてそれらにアクセスすると、依存関係が作成されます。したがって、現在、計算されたオブザーバブルは最初に評価されますが、オブザーバブルの値にアクセスしないため、再度更新されることはありません。

于 2012-04-11T16:31:10.177 に答える