Durandal / Hot Towel SPA,Bing地图和淘汰赛自定义装订

时间:2013-04-22 11:50:13

标签: knockout.js bing-maps durandal custom-binding hottowel

我正在使用带有Bing地图库的Durandal / Hot Towel SPA http://soulsolutions.com.au/Blog/tabid/73/EntryId/818/Knockout-JS-and-Bing-Maps.aspx。此库创建自定义ko绑定以访问地图控件。

对于durandal,这种绑定只能以一种方式起作用。可以在更改后从地图控件获取值(例如缩放级别),但是当我想在单击后设置缩放级别时它不起作用。

在Durandal之外,当我在一个简单的html页面上测试时,一切都还可以。

知道什么是错的吗?任何帮助将不胜感激。

我的观点模型:

    var mapVM = function () {
    this.map = {
        options: {
            credentials: "bing key",
            customizeOverlays: true,
            showScalebar: false,
            showMapTypeSelector: false,
            enableClickableLogo: false,
            enableSearchLogo: false,
        },
        mapview: {
            zoom: ko.observable(4).extend({ throttle: 1 }),
        },
    };

    this.testZoom = function () {
        this.map.mapview.zoom(5);
    };
};

视图:

<input data-bind='value: map.mapview.zoom, valueUpdate: "afterkeydown"' />
<input type="button" data-bind="click: testZoom" value="test zoom" />
<div id="mapControl" data-bind="bingmaps: { map: map }" style="position: relative; width: auto; height: 400px">

2 个答案:

答案 0 :(得分:0)

我认为你的testZoom工作正常。但是函数内部对this的引用没有map属性:

var mapVM = function () {
    var that = this;
    that.map = {
        options: {
            credentials: "bing key",
            customizeOverlays: true,
            showScalebar: false,
            showMapTypeSelector: false,
            enableClickableLogo: false,
            enableSearchLogo: false,
        },
        mapview: {
            zoom: ko.observable(4).extend({ throttle: 1 }),
        },
    };

    that.testZoom = function () {
        that.map.mapview.zoom(5);
    };
};

答案 1 :(得分:0)

@Damian,我试图破解路由器的routeinfo到支持的嵌套菜单并携带对象但不确定安全性。您可以查看here