1

如何制作templatepartial包含视图数据?我正在使用 Ember、车把和 requireJS。目前,我发现只outlets包含视图数据。我正在尝试在模板中显示模型的属性。具体来说,我试图numberFiveGraphData. graphHolderTemplate使用 at outlet 并不理想,因为我想在同一页面上显示来自不同视图的模板,而不管页面的 URL 是什么。

应用视图:

define(['ember', 'text!templates/applicationTemplate.html'],
       function(Em, applicationTemplate) {
  var ApplicationView = Em.View.extend({

    // warning: template doesn't work here, even though defaultTemplate does.
    defaultTemplate: Em.Handlebars.compile(applicationTemplate),
  });
  return ApplicationView;
});

应用模板:

<h1>{{#linkTo 'graph'}}Graph{{/linkTo}}</h1>
<h2>{{#linkTo 'graphHolder'}}Graph Holder{{/linkTo}}</h2>
<h4>outlet</h4>
{{outlet}}
<h4>template graphHolder</h4>
{{template graphHolder}}
<h4>partial graphHolder</h4>
{{partial 'graphHolder'}}

图持有人模板:

<h3>This is the graphHolder</h3>
<p>view.graphData.numberFive is: {{view.graphData.numberFive}}</p>

GraphHolderView:

define([ 'text!templates/graphHolderTemplate.html',
         'controllers/GraphController',
         'models/GraphData',
         'ember',
        ], function(graphHolderTemplate, GraphController, GraphData, Em) {
  // This is all that sets the template. hmmm
  Em.TEMPLATES['graphHolder'] = Em.Handlebars.compile(graphHolderTemplate);
  var graphData = GraphData.create();
  console.log("graphData.numberFive is ": graphData.numberFive);

  var GraphHolderView = Em.View.extend({
    controller: GraphController,
    classNames: ['hero-unit'],
    graphData: GraphData.create(),
  });
  return GraphHolderView;
});

地点

4

1 回答 1

2

很确定这是因为一个错字:

var garphData = GraphData.create();应该var graphData = GraphData.create();

编辑:好的,这不是因为错字。下一个猜测是,这view不是您所期望的 - 我认为它将引用ApplicationView。可以肯定的是,请尝试将以下内容添加到模板中:

<h3>This is the graphHolder</h3>
<p>view.graphData.numberFive is: {{view.graphData.numberFive}}</p>
<p>view is: {{view}}</p>
 {{log view}}

这应该打印view.toString()到页面和控制台。如果您想进一步检查元素,请尝试添加{{debugger}}到模板中,然后使用 js 控制台查看发生了什么。

无论如何,当你使用{{outlet}}helper 时,ember-router 会根据你当前的路由和上下文填写适当的模板。如果找到一个匹配的类,它会将模板包装在一个匹配的View类中。

{{outlet}}and不同{{render}},the{{partial}}{{template}}handlebars helper 都直接使用当前上下文渲染模板。这意味着他们不会尝试将模板包装在匹配的view类中。

您可能想在这里使用的是{{render}}助手。它将使用同名控制器的单例实例在当前上下文中呈现命名模板。如果存在同名的视图类,则使用该视图类。

于 2013-04-22T17:05:11.307 回答