1

クラスの教師の名のカンマ区切りのリストを作成しようとしています。

最初に、次のような計算されたプロパティを作成しました。

App.Class = DS.Model.extend({
    title: DS.attr('string'),
    description: DS.attr('string'),
    start_date: DS.attr('date'),
    end_date: DS.attr('string'),
    teachers: DS.hasMany('App.Teacher'),
    department: DS.attr('string'),

    teacher_list: Ember.computed(function() {
        var teachers = this.get('teachers');
        var teachers_list = '';
        teachers.forEach(function (teacher) {
            teachers_list += teacher.get('first_name');
            if (teachers.indexOf(teacher) < teachers.get('length') - 1) teachers_list += ', ';
        });
        return teachers_list;
    }).property('teachers.@each.first_name')
});

テンプレートでは、次のようになります。

...
<td>{{class.teacher_list}}</td>
...

しかし、私は first_names リンクを教師自身のページにするというアイデアを思いつきましたが、ここで立ち往生しています。次のコードを試しましたが、うまくいきませんでした。

App.js

Ember.Handlebars.registerBoundHelper('teachers_list', function(teachers) {
    var teachers_list = '';
    teachers.forEach(function (teacher) {
        teachers_list += "{{#linkTo 'teacher' " + teacher.id + "}}{{teacher.first_name}}{{/linkTo}}";
        if (teachers.indexOf(teacher) < teachers.get('length') - 1) teachers_list += ', ';
    });
    return (teachers_list);
});

テンプレート

...
<td>{{teachers_list class.teachers}}</td>
...

出力

{{#linkTo 'teacher' 0}}{{teacher.first_name}}{{/linkTo}}, {{#linkTo 'teacher' 1}}{{teacher.first_name}}{{/linkTo}}, {{#linkTo 'teacher' 2}}{{teacher.first_name}}{{/linkTo}}

ヘルパー内から正しいリンクを作成できる方法はありますか?

乾杯

解決

テンプレート:

<td id="teacher-list">{{#each teacher in course.teachers}}<span>{{#linkTo 'teacher' teacher}}{{teacher.first_name}}{{/linkTo}}</span>{{/each}}</td>

CSS:

#teacher-list span:not(:last-of-type)::after { content: ", "; }
4

1 に答える 1

1

テンプレートで単純な{{#each teachers}}...{{/each}}. または、Handlebars ヘルパーを使用することを主張する場合は、次の方法で実行できます: http://www.thesoftwaresimpleton.com/blog/2013/04/07/handlebars-helper/

ヘルパー関数の呼び出しはlinkTo難しい場合があるため、妥協点としてビューを作成することをお勧めします。

App.TeachersListView = Ember.View.extend({
  teachers: null,
  template: Ember.Handlebars.compile(
    '{{#each teacher in view.teachers}}' +
      '{{#linkTo "teachers" teacher}}{{teacher.name}}{{/linkTo}}' +
    '{{/each}}'
  )
});

そして、次のように使用します。

{{view App.TeachersListView teachersBinding="teachersList"}}

ただし、モデルには属さないため、モデルでこれを行うことは絶対にしないでください。また、ほとんどすべての言語で予約語であり、予期しないエラーが発生する可能性があるため、class/に名前を付けることは避けます。Class

linkToこれはあなたの質問に対する回答ですか、それともヘルパーについてさらにサポートが必要ですか?

于 2013-04-09T20:11:00.947 に答える