2

我已经定义了一个 View 子类 MenuitemView,我从模板中引用它(见下文)。但 Ember 没有找到它。我不断收到此错误:错误:断言失败:无法在路径“App.MenuitemView”找到视图。我错过了什么?

初始化代码:

window.require.register("initialize", function(exports, require, module) {
  var App;
  App = require('app');
  App.Router.map(function(){});
  require('routes/IndexRoute');
  require('templates/menuitem');
  require('templates/application');
  require('templates/index');
  App.initData();
});

查看定义:

window.require.register("views/MenuItemView", function(exports, require, module) {
  var App;
  App = require('app');
  module.exports = App.MenuitemView = Em.View.extend({
    templateName: 'menuitem',
    visibility: function(){
      if (App.selectedDishType && !App.selectedDishType === this.get('dish').get('type')) {
        return 'invisible';
      } else {
        return '';
      }
    }
  });
});

引用视图的模板(templates/index.hbs):

{{#each item in content}}
    {{view App.MenuitemView itemBinding=item}}
{{/each}}

查看模板 (templates/menuitem.hbs)

<div class="dishitem">
    <div class="dishimage">
        {{thumbnail item.dish.identifier}}
    </div>
    <div class="dishdetails">
        <p class="dishname">{{uppercase item.dish.name}}</p>
        <p class="dishdescription">{{item.dish.description}}</p>
        <ul class="packages">
        {{#each package in item.packages}}
            <li>
                <span class="packageprice">€ {{package.price}}</span>
                <span class="packagespec">
                    {{#if package.description}}({{package.description}}){{/if}}
                </span>
            </li>
        {{/each}}
        </ul>
    </div>
</div>
4

3 回答 3

2

问题是由于我使用早午餐来构建应用程序并且我将所有 javascript 组件和模板放在单独的文件中。然后,Brunch 编译模板以分离 common.js javascript 模块。模板编译模块中的代码无权访问视图模块中定义的视图。通常处理此类依赖项的方法是在依赖模块的 javascript 中添加“require('my-other-module')”。但是,由于我的模板源不是 javascript 而是把手,我无法将它添加到源中。解决方案是确保您的应用程序命名空间是全局可用的。您可以通过不将应用程序初始化代码放在模块中来做到这一点,例如直接在您的 html 中,在脚本标记内:

<script>
App = require('app');
</script>
于 2013-05-29T05:32:28.200 回答
0

我在使用 ember-tools 时遇到了类似的问题,接受的答案让我走上了正确的道路。我将把我的解决方案留给后代。

我的应用程序设置如下:

var FooRoute = Ember.Route.extend({
  ...
  renderTemplate: function() {
    this.render();
    this.render('Bar', {into: 'foo', outlet: 'bar', controller: 'foo' });
  },
  ...
});

并在模板中foo.hbs

{{outlet bar}}

由于@RudiAngela 在接受的答案中提到的相同原因,这导致了问题。不过,我没有包含<script>标签,而是将 {{outlet}} 更改为 {{view}},

{{view App.Bar}}

这为我解决了这个问题。

于 2013-08-22T18:39:00.667 回答
0

我注意到的是 menuitemview 的“项目”部分有时是大写的(views/MenuItemView),有时是小写的。这可能是错误消息的来源吗?

于 2013-05-27T11:29:55.107 回答