1

私は Ember を初めて使用し、コントローラーのプロパティの変更を観察するために Ember View を使用しようとしています。ビューをログに記録できますが、プロパティが変更されたときにハンドラーが起動しません。

私は基本的に、ユーザーがクリックしてレコードを削除したときにビューからアイテムを削除する Ember の方法を学ぼうとしています。これに関する本当に良いガイドは見つかりませんでした。アドバイスをいただければ幸いです。

何かを残している場合はお知らせください。前もって感謝します!

(これは継承されたコードベースです。まだ Ember をアップグレードする準備はできていません。)

Ember v1.0.0-rc.3

ルート

this.resource('posts');
App.PostsRoute = App.AuthenticatedRoute.extend({ // extension of Em.Route
  model: function() {
    return App.Post.list(); // returns a list of posts
  },

  events: {
    // renders a modal in the post context
    showDeleteModal: function(model) {
      this.render('modals/_confirmation', {
        into: 'posts',
        outlet: 'modal',
        controller: 'post'
      });

      this.controllerFor('post').set('model', model);
    }
  }
});

コントローラ

App.PostsController = Em.ObjectController.extend(App.PagedTable, Ember.Evented, {
  // ...
});

App.PostController = Em.ObjectController.extend({
  foo: false,

  del: function() {
    this.set('foo', true);
  }
});

意見

App.PostsView = Em.View.extend();

App.PostView = Em.View.extend({
  didInsertElement: function() {
    console.log('Inserted!');
  },

  test: function() {
    console.log('Observed!');
  }.observes('controller.foo')
});

テンプレート

{{#each data in currentDataBlocks itemController="post" itemViewClass="App.PostView"}}
  <tr>
    <td>Stuff</td>
    <td>Stuff</td>
    <td>Stuff</td>
    <td>Stuff</td>
    <td><button class="icon-trash" {{action showDeleteModal data}}></button></td>
  </tr>
{{/each}}

<!-- ... -->

{{outlet modal}}
4

1 に答える 1

5

私の意見では、ビューで項目のリストを管理する最善の方法は、表示する必要がある項目のみを含むリストのプロパティを作成し、ビューでこのリストを反復処理することです。

あなたの例を使用して(簡単にするためにいくつかの変更を加えて)、次のことを行います。

コントローラ:

PostsController = Em.ObjectController.extend(....
    fooDataBlocks: function(){
        return this.get("currentDataBlocks").filter(function(dataBlock){
            return dataBlock.get("foo");
        }
    }.property("currentDataBlocks.@each.foo")
);

テンプレート:

{{#each data in fooDataBlocks...}}
   ...
{{/each}}

経験則として、可能であれば常にオブザーバーよりもプロパティを使用することをお勧めします。このようにして、すべての変更ではなく、必要な場合にのみ値がキャッシュおよび計算されます。

于 2013-09-17T06:56:15.953 に答える