Ember.js 将迭代对象传递给控制器方法
尝试将迭代对象传递给控制器方法时,该对象将作为字符串传递 模板:Ember.js 将迭代对象传递给控制器方法,ember.js,controller,Ember.js,Controller,尝试将迭代对象传递给控制器方法时,该对象将作为字符串传递 模板: <script type="text/x-handlebars" data-template-name="gradebooks"> {{#each}} {{#link-to "gradebook" this}}{{title}}{{/link-to}} {{/each}} {{outlet}} </script> <script type="text/x-handlebars"
<script type="text/x-handlebars" data-template-name="gradebooks">
{{#each}}
{{#link-to "gradebook" this}}{{title}}{{/link-to}}
{{/each}}
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="gradebook">
<h1>Student Grades</h1>
{{#each student in students}}
{{#each assignment in assignments}}
{{student.name}}, {{assignment.name}}: {{getGrade student assignment}}%
{{/each}}
{{/each}}
</script>
控制器:
App.GradebookController = Ember.ObjectController.extend({
getGrade: function(student, assignment) {
console.log(student, assignment);
return 5;
}
});
型号:
App.Gradebook = DS.Model.extend({
title: DS.attr('string'),
students: DS.hasMany('student', { async: true}),
assignments: DS.hasMany('assignment', { async: true})
});
App.Student = DS.Model.extend({
name: DS.attr('string'),
gradebook: DS.belongsTo('gradebook'),
grades: DS.hasMany('grade', { async: true })
});
App.Assignment = DS.Model.extend({
name: DS.attr('string'),
gradebook: DS.belongsTo('gradebook'),
grades: DS.hasMany('grade', { async: true })
});
App.Grade = DS.Model.extend({
score: DS.attr('number'),
student: DS.belongsTo('student'),
assignment: DS.belongsTo('assignment')
});
目前,上面为每个学生输出字符串
“student”
。如果我有{{getGrade student.id}
,它将输出字符串“student.id”
。我怎样才能让它作为一个对象通过学生的考试?鉴于你的修订,我在下面修订了我的答案,以便更好地对齐:
App.AssignmentController = Ember.ObjectController.extend({
needs: ["student"],
getGrade: function() {
var student = this.get('controllers.student');
//logic to get grade
}.property() //thing to observe for changes
});
<script type="text/x-handlebars" data-template-name="gradebooks">
<h1>Student Grades</h1>
{{#each}}
{{#link-to "gradebook" this}}{{title}}{{/link-to}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="gradebook">
{{#each student in students}}
{{render 'student' student}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="student">
{{name}}
{{#each assignment in assignments}}
{{render 'assignment' assignment}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="assignment">
{{name}}: {{getGrade}}%
</script>
App.AssignmentController=Ember.ObjectController.extend({
需要:[“学生”],
getGrade:函数(){
var student=this.get('controllers.student');
//获得分数的逻辑
}.property()//要观察更改的内容
});
学生成绩
{{{#各}
{{{#链接到“成绩册”本}{{{title}{{{/链接到}}
{{/每个}}
{{{学生中的每个学生}
{{呈现“学生”学生}
{{/每个}}
{{name}}
{{{#作业中的每个作业}
{{呈现“赋值”赋值}
{{/每个}}
{{name}}:{{getGrade}}%
一个有用的工具是{{log model}}或{{log record}或{{log…whatver..}来了解视图接收到的数据
如果您打开Chrome Ember Inspector,您还应该看到定义了哪些视图、控制器、路线、模型等,这将有助于理解
简而言之,您不能使用{{getGrade student.id}将参数传递给控制器-您可以定义一个Handelbars助手来接受参数,但我认为这不是您想要的。上述方法对我有效
希望这有助于以这种方式定义它不会对我起作用,因为我的完整示例既有
学生
也有成绩
。我将编辑我的问题以显示更完整的示例。
App.AssignmentController = Ember.ObjectController.extend({
needs: ["student"],
getGrade: function() {
var student = this.get('controllers.student');
//logic to get grade
}.property() //thing to observe for changes
});
<script type="text/x-handlebars" data-template-name="gradebooks">
<h1>Student Grades</h1>
{{#each}}
{{#link-to "gradebook" this}}{{title}}{{/link-to}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="gradebook">
{{#each student in students}}
{{render 'student' student}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="student">
{{name}}
{{#each assignment in assignments}}
{{render 'assignment' assignment}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="assignment">
{{name}}: {{getGrade}}%
</script>