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}}