Ember.js 把手插座包含视图数据,但模板和部分don';T

Ember.js 把手插座包含视图数据,但模板和部分don';T,ember.js,requirejs,handlebars.js,Ember.js,Requirejs,Handlebars.js,如何使模板或部分包含视图数据?我用的是余烬、车把和requireJS。目前,我发现只有outlets包含视图数据。我试图在模板中显示模型的属性。具体来说,我试图在graphHolderTemplate中显示GraphData模型的numberFive属性。使用at outlet并不理想,因为我希望在同一页面上显示来自不同视图的模板,而不考虑页面的URL 应用程序视图: define(['ember', 'text!templates/applicationTemplate.html'],

如何使
模板
部分
包含视图数据?我用的是余烬、车把和requireJS。目前,我发现只有
outlets
包含视图数据。我试图在模板中显示模型的属性。具体来说,我试图在
graphHolderTemplate
中显示
GraphData
模型的
numberFive
属性。使用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'}}

很肯定这是因为打字错误:

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

编辑:好吧,这不是因为打字错误。下一个猜测是
视图
不是您所期望的-我认为它将引用
应用程序视图
。为确保安全,请尝试将以下内容添加到模板中:

<h3>This is the graphHolder</h3>
<p>view.graphData.numberFive is: {{view.graphData.numberFive}}</p>
<p>view is: {{view}}</p>
 {{log view}}
这是图形文件夹
view.graphData.numberFive是:{{view.graphData.numberFive}

视图为:{{view}}

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

无论如何,当您使用
{{outlet}}
帮助程序时,ember router将根据您当前的路由和上下文填写相应的模板。如果找到匹配的
视图
类,它会将模板包装到该类中

{outlet}}
{render}}
不同,
{{partial}}
{template}
车把辅助对象都直接使用当前上下文渲染模板。这意味着他们不会尝试将模板包装到匹配的
视图
类中


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

我修复了打字错误,图形数据仍然不会在
{template graphHolder}}
中打印,但会在
{outlet}}
中打印。更新我的答案。谢谢,
呈现
属于哪里,它的参数是什么?在你的应用程序模板中使用它,你有
{{template}
{{partial}
。参数是
模板名、上下文、选项
参见api文档或源代码
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;
});
<h3>This is the graphHolder</h3>
<p>view.graphData.numberFive is: {{view.graphData.numberFive}}</p>
<p>view is: {{view}}</p>
 {{log view}}