将视图层次结构从ember-0.9.8.1移植到ember-1.0.0-rc.6

时间:2013-09-23 05:38:07

标签: ember.js

我无法理解这一点。我已经从这个jsfiddle(图片预览+上传的展示)开始,它与ember-0.9.8.1一起使用,我正在尝试使用this jsbin中的ember-1.0.0-rc.6

这是导致问题的相关部分:

<script type="text/x-handlebars">
    {{#view Ember.View contentBinding="App.myModel"}}
      {{#view App.PreviewUploadImage name="logo_image" contentBinding="content"}}
        {{view fileField}}
        {{view previewImageView width="200" height="100" srcBinding="content.myModel_src"}}
      {{/view}}
    {{/view}}
</script>

和这个js一起:

App.PreviewUploadImage = Ember.View.extend({
    fileField: Ember.TextField.extend({...}),
});

正如您在控制台中看到的错误:

Assertion failed: Unable to find view at path 'fileField'
Assertion failed: You must pass a view to the #view helper, not fileField () 
Uncaught TypeError: Cannot read property 'proto' of undefined

fileField是一个Ember.TextField(确实是一个视图),并在使用它的上下文中定义(视图PreviewUploadImage)。

那么问题出在哪里呢?

2 个答案:

答案 0 :(得分:1)

我猜您遇到的问题是由于fileField视图未自动创建,因此查找失败。

尝试创建视图而不是扩展:

App.PreviewUploadImage = Ember.ContainerView.extend({
  childViews: ['fileField'],
  fileField: Ember.TextField.create({...}),
});

更新

编辑我的回答我忘记了一些实质内容,使外部视图成为ContainerView并将fileField定义为childViews数组中的子视图。

希望它有所帮助。

答案 1 :(得分:0)

this不会引用该视图,而是引用您的控制器内容。您必须使用view引用该视图,如下所示:

<script type="text/x-handlebars">
  {{#view Ember.View contentBinding="App.myModel"}}
    {{#view App.PreviewUploadImage name="logo_image" contentBinding="content"}}
      {{view view.fileField}}
      {{view view.previewImageView width="200" height="100" srcBinding="content.myModel_src"}}
    {{/view}}
  {{/view}}
</script>