javascript - 在 Ember 时间轴上动态加载/重新加载绑定(bind)数据

标签 javascript ember.js

我正在使用 Ember Timetree 代码 ( Timetree ),我认为它很棒。我是 Ember 和 D3 的新手,所以跳入 Timetree 代码让我头疼。 我正在尝试添加功能,以便如果用户单击页面上的按钮,时间树将重新加载不同的数据。我已经尝试了一段时间但似乎没有任何效果。 这是我所拥有的:

时间树的 Ember 模板:

<script type="text/x-handlebars" data-template-name="index">
  <div class="example">
    {{view Ember.Timetree.TimetreeView contentBinding="App.ApiData" selectionBinding="selectedEvents" rangeBinding="eventsRange_example2"}}
  </div>  
</script>

定义时间树 div 的 HTML:

<div id="app"></div>

用户单击的按钮的 HTML:

<button type="button" onclick="loadNewTimetree()">Reload</button>

用于重新加载时间树的函数的Javascript:

function loadNewTimetree() {
  var newJsonData = .... Get the JSON data
  // Replace the existing JSON data with the newJsonData and re-draw the timeline - how? 
 }

我缺少将更新的 JSON 链接到时间树的部分是什么?

谢谢。

编码(marshal)

最佳答案

我找到了答案。 首先,我在模板中添加了一个 viewName="mmView" 标签:

<script type="text/x-handlebars" data-template-name="index">
  <div class="example">
    {{view Custom.Timetree.TimetreeView viewName="mmView" contentBinding="App.ApiData" selectionBinding="selectedEvents" rangeBinding="eventsRange_example2"}}
  </div>  
</script>

我找到了答案的核心here 。所以我更新了我的 javascript 函数:

function loadNewTimetree() {
  var newJsonData = .... Get the JSON data
  // View.views returns a hashtable. Key is the id, value if the View.
  var views = Ember.View.views;

  for (var nextKey in views) {
    var nextView = views[nextKey];
    // The 'viewName' is set in the template and needs to be unique for each timeline.
    if (nextView.viewName && nextView.viewName == 'mmView')
    {
        nextView.reloadWithNewData(newJsonData );
    }
  }

 }

然后我在 View 中添加了一个函数来处理更新的 JSON:

Custom.Timetree.TimetreeView = Ember.Timetree.TimetreeView.extend(
{
... Other attributes,
 reloadWithNewData:function (newTimelineJson) 
 {
   // Need to clear out the svg contents before adding the new content
   // or else you get strange behavior.
   var thisSvg = this.get('svg');
   thisSvg.text('');
   this.set('content', newTimelineJson);
   this.didInsertElement();
}
});

因此,当我调用 loadNewTimetree() 函数时,它会使用新的 JSON 更新时间线。

关于javascript - 在 Ember 时间轴上动态加载/重新加载绑定(bind)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22234710/

相关文章:

ember.js - 如何使用 Controller 和 View 组织 ember 应用程序

rake 管道 sourceMap 过滤器

javascript - Tomcat不压缩js文件

javascript - AngularJS 文件上传发送陈旧的 formData

ember.js - 将参数传递给 Ember Handlebars 助手中的事件处理程序

ember.js - ember-simple-auth 更新 session 中的数据

javascript - 如何在 ember.js 的模式对话框中打开路线?

javascript - laravel 中的 Vue.js 错误

javascript - 键盘快捷键扩展中的触发事件

javascript - 未捕获的语法错误 : Unexpected number