2014-11-23 81 views
2

更新:这里有这种情况的文档:Conditional templates use the if attribute to conditionally create a template instance.Polymer,如何在渲染其他元素之前等待core-ajax完成?

这个程序,plnkr.co,应做到以下几点:

  1. 使用核心AJAX组件从DB获得project_location(JSON在这个例子中)
  2. 使用谷歌地图组件来显示带有标记的地图
  3. 当用户拖动了市场,使用核 - AJAX来保存新的位置到DB

问:如何让谷歌地图组件等待渲染,直到AJAX请求完成?

目前出现此错误: “在观察者回调期间捕获的异常:TypeError:纬度必须是数字”,我假设这是因为google-map是在{{project_location}}启动之前呈现的。

 <core-ajax id="ajax_get_location" 
     auto 
     url="project_location.json" 
     params='{"idProject":"{{idProject}}"}' 
     on-core-response="{{locationLoaded}}" 
     handleAs="json" 
     response = "{{project_location}}"></core-ajax> 



    <google-map id="project_location_map" 
      zoom="{{project_location.location_map_zoom}}" 
      fitToMarkers> 
     <google-map-marker 
        latitude ="{{project_location.location_map_marker_latitude | toFixed(2)}}" 
        longitude ="{{project_location.location_map_marker_longitude | toFixed(2)}}" 
        title  ="{{project_title}}" 
        draggable ="true" 
        > 
     {{project_title}} 
     </google-map-marker></google-map> 

回答

2

包裹等元素,我认为最干净的方法是不去想这与<core-ajax>一个时间问题。基本上,问题在于,除非project_location的值存在,否则您不希望在页面上包含<google-map>元素。在你的代码片段中,project_location的值来自<core-ajax>,但你可以很容易地想象一个不同的实现,其中project_location通过其他方式填充。

所以,如果你想这样的说法,什么是有意义是包裹<google-map>在检查的project_location值的条件模板:

<template if="{{project_location}}"> 
    <google-map> 
    ... 
    </google-map> 
<template> 
+1

确定吗?我试了一下,发现不管你使用if还是不影响结果。它出现在你得到回应之后**。 – Melkor 2014-12-13 11:53:58

1

可以当核心axax已完成对模型改变的值,并用<template if="{{ajaxHasFinished}}">...</templ<te>

0

除了其他人所说,一个又一个方法在教程https://www.polymer-project.org/docs/start/tutorial/step-3.html中演示,其中您创建另一个元素来执行ajax事物,并将其用于原始元素中。数据传输是通过属性和数据绑定来实现的。

我认为这是一种更好的方式,因为您将数据显示与数据提取分开,使其在软件工程中看起来更好。

P.S.我试过其他答案,但我发现无论您是否使用if条件都没有关系。

+0

无论您是直接使用core-ajax还是通过其他元素间接使用,模板中的if条件都是必需的。 有时,AJAX响应可能会比其他元素的渲染速度更快,在这种情况下,您将不会注意到问题 - 其他元素的数据将在那里显示。 也许这在你的测试中发生了。 – 2014-12-14 09:49:21

+0

@goceribeski但是在我的测试中,我让我的后端脚本休眠了2秒,并没有使用'if'条件,并且模板仍然会等待2秒钟出现。 – Melkor 2014-12-14 15:42:23

相关问题