繁体   English   中英

如何将可计算的可观察值添加到淘汰表映射

[英]How to add computed observable to knockoutjs mapping

我正在使用映射插件基于从服务器发送的对象创建客户端视图模型。 对象是基本地址信息,即:地址1,地址2,城市,州,邮政等。

绑定视图模型后,如果用户更改地址,我希望google maps canvas更新。 我创建了一个计算的可观察值,用于检查输入的值并调用地图更新功能。 当我不使用映射插件时,即在本地定义模型之前,我已经进行了此工作,但是一旦引入了映射,就无法将计算出的可观察对象附加到视图模型中。

我尝试按照映射插件文档中的说明进行操作,但是计算得出的可观察值不会触发更新。 我有一个自定义映射,该映射调用一个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);
};​

通过映射插件发送数据时,所有属性将变为可观察的。

这意味着您需要像下面这样的函数来访问它们:

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

当您在计算的可观察对象内部将它们作为可观察对象访问时,它将创建一个依赖项。 因此,当前将对计算的可观察值进行初始评估,但不会再更新,因为它不访问任何可观察值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM