3

こんにちは私は次のルートを持っています:

MB3.PlaylistRoute = Ember.Route.extend({
  model: function(params) {
    return MB3.Playlist.find(params.playlist_id);
  }
});

プレイリストには、トラックとの hasMany 関係があります。プレイリストビューで、プレイリストの最初のトラックの属性を使用していくつかのロジックを実行したいと考えています。

だから私はこのコードを追加しました:

MB3.PlaylistView = Ember.View.extend({
  didInsertElement: function() {
    console.log(this.get("controller.tracks").objectAt(0).get("title"));
  }
});

問題は、タイトルが定義されていないことです(まだロードされていないためだと思います。2番目に試したのは、didLoadイベントを待っていることです:

MB3.PlaylistView = Ember.View.extend({
      didInsertElement: function() {
        var self=this;
        this.get("controller.tracks").on("didLoad", function() {
          console.log(self.get("controller.tracks").objectAt(0).get("title"));
        });
      }
    });

ただし、これは null も記録します。どうすればそれを達成できますか?

4

1 に答える 1

3

エイドリアンがコメントで言ったように、問題 587に遭遇しているようです。とはいえ、この場合、「didLoad」コールバックは実際には必要ないと思います。代わりに、計算されたプロパティを使用して、video_id またはトラック タイトルを取得してみてください。例えば:

MB3.PlaylistView = Ember.View.extend({
  firstTrackTitle: function() {
    return this.get('controller.tracks.firstObject.title');
  }.property('controller.tracks.firstObject.title')      
});

次に、このプロパティが定義されている場合は、テンプレートにプレーヤーを埋め込みます。

{{#if view.firstTrackTitle}}
    embed code here
{{/if}}

FWIW私はこのロジックをビューではなくコントローラーに入れますが、同じ考えです。

于 2013-02-05T13:58:18.557 に答える