【问题标题】:Why data-bind doesn't work inside a string?为什么数据绑定在字符串中不起作用?
【发布时间】:2019-11-28 15:33:27
【问题描述】:

我正在尝试向 Google 地图中的工具提示(信息窗口)添加一个按钮。我在一个字符串中生成这个按钮,我只是将此字符串添加到工具提示的内容中,以便它在工具提示中生成按钮。问题是数据绑定似乎不能以这种方式工作。

这里是情况的图片:https://imgur.com/gpyl0Mr

function MapViewModel() {
  var self = this;
  self.removeTurbineColor = ko.observable(false);

  function addToolTip(currentTurbine, turbineIcon){
    var turbineToolTip = "name";

    turbineToolTip += "<button id='remove-emergency-turbine' data-bind='click: 
    removeTurbineColor'> remove </button>";


   self.removeTurbineColor.subscribe( function() {
     console.log("turbine changed");
   });

  var infoWindowTurbine = new google.maps.InfoWindow({content: turbineToolTip});

  if(turbineIcon){
    google.maps.event.addListener(turbineIcon, "click", function(){
      infoWindowTurbine.setPosition(turbineIcon.getPosition());
      infoWindowTurbine.open(self.map, turbineIcon);
     });
   }

 }
}

当我单击按钮时,我希望控制台中的输出是“涡轮机改变”,但没有出现。

【问题讨论】:

标签: javascript google-maps knockout.js


【解决方案1】:

第一次调用 ko.applyBindings 时会设置淘汰绑定。它不会对在初始绑定之后插入的元素应用绑定。

您可以附加一个按钮元素并手动附加一个单击事件处理程序,而不是插入 HTML。

或者,可能更好的是,您可以对按钮 HTML 进行硬编码,以便将其绑定应用到 ko.applyBindings,并使用另一个 observable 切换其可见性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-24
    • 2010-10-26
    • 1970-01-01
    • 2021-09-23
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多