EmberJS {{#linkTo}}一个尚未加载的模型

时间:2013-05-12 21:40:14

标签: ember.js handlebars.js

我正在制作我的第一个重要的Ember.js应用程序,并且遇到了一些障碍。在使用ember-data击中一个太多的显示停止错误之后,我决定使用Ember.Object滚动我自己的模型(至少现在 - ember-data看起来真的很棒,很快就会真实)。 / p>

我的基本模型结构是:

  • 专辑(具有相册特定的影片,并引用图像集合)
  • 图像(图像模型的ArrayProxy集合,跟踪集合级别的attrs,如'currentImage'和'nextImage')
  • 图像

我的模板中有一个{{#linkTo}}帮助器,应该允许用户点击集合中的下一个图像,如下所示:

<button>
    {{#linkTo image controllers.images.nextImage}}
        Next Image
    {{/linkTo}}
</button>

此模板具有AlbumController的上下文,needs: ["images"]controllers.images.nextImage是一个计算属性,它计算出当前显示图像的ID,然后使用它来查找Image ArrayProxy集合中下一个模型的Images模型。

我的问题是:

页面加载后,我收到错误消息Uncaught Error: assertion failed: Cannot call get with 'id' on an undefined object.

我假设这是因为{{#linkTo}}帮助器试图从id的返回获取controllers.image.nextImage属性,Images是一个依赖{{1}的计算属性从服务器加载的集合。这种异步行为正在使用幕后承诺进行处理,但是{{#linkTo}}帮助器似乎需要在页面加载时立即返回的有效上下文

我的问题是:

  • 是否有其他人必须处理这种情况,他们没有使用ember-data并且必须使用{{#linkTo}}帮助程序,这些帮助程序具有不能立即获得的计算属性?
  • 任何人都可以提出一些不与Ember做事有关的解决方法吗?

我的一些想法是:

  • 使计算属性返回一个虚拟上下文,以某种方式在加载后被有效模型替换
  • 使用{{#action}}帮助程序代替{{#linkTo}}

我有written up a JSBin example主要是代码完成的,除了我无法操纵哈希URL来触发嵌套路由,所以我不得不在应用程序模板中做所有事情。

0 个答案:

没有答案