0

我有一个使用画布元素的 Ember 应用程序。我正在使用以下模型:

一个套件hasMany Positions hasMany Components hasMany Features

为第一个套件加载模型数据的映射路线对象:

App.MapRoute = Ember.Route.extend({

  model : function() {
    return App.Kit.find(1);
  },

  setupController: function(controller, model){
    this._super(controller, model);
  }
});

以及这条路线中的画布元素视图

<script type="text/x-handlebars"  data-template-name="application">
  {{outlet}}
</script>

<script type="text/x-handlebars"  data-template-name="map">
  {{view App.CanvasView }}
</script>

画布视图:

App.CanvasView = Ember.View.extend({
  tagName: 'canvas',
  width: 600,
  height: 600,

  didInsertElement: function(){
   var el = this.$();

   // Pseudo Code
   // When all kit, Position, Component and Feature Data is loaded
   // Pass Data to createFabricCanvas
   // this.createFabricCanvas(el, data);

  },

  createFabricCanvas: function(el, data){
    fabCanvas = new fabCanvas(el, data);
  }
});

我的问题是如何确保在将每个 hasMany 模型的所有数据传递到 fabCanvas 之前加载它。FabCanvas 库是预先编写的,并假定所有数据在处理之前都是可用的。

我想解决方案可能涉及使用 .on('didLoad') 检查每个模型的存在。

谢谢。

4

2 回答 2

0

This worked for me. In my case, my main model was a App.Month, and it hasMany App.Company models. This was a method in my view:

dataChanged: function() {
    if (this.get('controller.model.companies.isLoaded')) {
        Ember.run.once(this, 'someFunction');
    }
}.observes('controller.model.companies.isLoaded'),
于 2013-08-07T01:52:49.993 回答
0

您可能会尝试检查和观察isLoaded父模型数组上的属性,就像这些答案中所建议那样。虽然我不确定这是否能保证所有子关系或您的模型也被加载。但你可以试一试。我会尝试自己为这个用例设置一些测试,如果我发现了什么,我会更新答案。has many

于 2013-06-12T08:31:48.033 回答