0

Ember.js に固​​定長配列コントローラーを実装しようとしていますが、リストが容量を超えたときに最初の項目を削除するようにしています。私の試みは以下のとおりですが、エラーで失敗しています。

編集: http://jsfiddle.net/EsF4R/39/に単純な jsFiddle があります。

アレイ コントローラに関連付けられたビューがあります。エラーはビューによるものだと思います。削除すると、エラーがなくなり、最初のオブジェクトをポップアウトできます。(注: FIFO 機能を実装するまでは、ビューは正常に機能していました。)

また、popFirst 関数の内容を実行ループ (Ember.run(...)) に入れてみました。

このfifo配列を実装してビューを引き続き機能させる方法を知っている人はいますか?

MyApp.fifoController = Ember.ArrayController.create({
  content: [],
  popFirst: (function() {
    if (this.get('length') >= 3) {
      return this.removeObject(this.get('firstObject'));
    }
  }).observes('length')
});

<div id="fifo-pool">
  {{#each MyApp.fifoController}}
    {{#view MyApp.ItemView contentBinding="this"}}{{/view}}
  {{/each}}
</div>


Error:
Uncaught TypeError: Cannot call method '_insertElementLater' of undefined genigames/vendor/ember:16704
DOMManager.after genigames/vendor/ember:16704
Ember.ContainerView.Ember.View.extend._scheduleInsertion genigames/vendor/ember:14708
Ember.ContainerView.states.hasElement.childViewsDidChange genigames/vendor/ember:14765
Ember.View.Ember.Object.extend.invokeForState genigames/vendor/ember:12902
Ember.ContainerView.Ember.View.extend.childViewsDidChange genigames/vendor/ember:14687
...

編集: http://jsfiddle.net/EsF4R/39/に単純な jsFiddle があります。

4

1 に答える 1

0

私はあなたがこれについて間違っていると思います。長さを観察し、アイテムを追加し、アイテムを削除し、さらに長さを観察しています。代わりに、アイテムを追加する前に、削除する必要があるかどうかを確認する必要があります。Ember には非常に優れた mixin システムがあるため、pushObject 関数をオーバーライドし、削除を確認してから呼び出し_superて追加できます。次の例を参照してください。

MyApp.fifoController = Ember.ArrayController.create({
    content: [],
    pushObject: function(object) {
        if (this.get('length') >= 4) {
            this.removeObject(this.get('firstObject'));
        }
        this._super.apply(this, arguments);
    }
});

http://jsfiddle.net/MSKxG/

于 2012-06-29T22:17:00.600 に答える