首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不引发事件的panTo

不引发事件的panTo
EN

Stack Overflow用户
提问于 2015-09-23 21:51:53
回答 1查看 186关注 0票数 1

我正在试着和knockout的宣传单结婚,我有一个小问题,我已经创建的装订。我现在有这样的想法:

代码语言:javascript
复制
ko.bindingHandlers.map = {
    init: function (element, valueAccessor, allBindings) {
        var obj = valueAccessor();
        var coordsObj = allBindings.get("location");
        var coords = coordsObj ? ko.unwrap(coordsObj) : { lat: 41.5047729, lng: -81.6856701 };
        var map = L.map(element).setView(coords, 16);
        L.esri.basemapLayer("Streets").addTo(map);

        map.on("moveend", function (e) {
            var latlng = e.target.getCenter();
            coordsObj(latlng);
        });
        obj(map);
    },
    update: function (element, valueAccessor, allBindings) {

    }
};

ko.bindingHandlers.location = {
    init: function (element, valueAccessor, allBindings) {

    },
    update: function (element, valueAccessor, allBindings) {
        var map = ko.unwrap(allBindings.get("map"));
        var val = valueAccessor();
        var coords = ko.unwrap(val);
        map.panTo(coords, { animate: true });
    }
};

它的绑定方式如下:

代码语言:javascript
复制
<div id="map" data-bind="map: map, location: location"></div>

这似乎是可行的,但是如果我更新我的location可观察对象,它将调用update函数,该函数将根据需要调用map.panTo。但是,.panTo将触发moveend事件,该事件将更新location,这将导致update函数再次触发,从而再次调用panTo ...(此时,您似乎没有得到moveend,可能是因为它没有实际移动)。

这不是一个大问题,它似乎并不是真的减慢它,但它是恼人的和低效的,所以我希望能够在原则上删除它。那么,有没有一种好的方法来平移地图,并导致moveend触发?或者,有没有一种从location绑定到map绑定中的事件处理程序进行通信的好方法,即“忽略此moveend"?

EN

回答 1

Stack Overflow用户

发布于 2015-09-23 22:25:14

所以有没有一个好的方法来平移地图并引起

呢?

不,如果不扩展L.Map并添加所需的功能,就不会。如果API发生变化,这可能会带来麻烦,因此这并不是一个真正的选择。

为什么不在调用panTo之前使用map.off('moveend', function () {});方法删除处理程序,然后使用map.on('moveend', function () {});方法重新附加处理程序呢?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32741521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档