繁体   English   中英

灰烬视图未观察到属性更改

[英]Ember View not observing property changes

我是Ember的新手,我正尝试使用Ember View来观察控制器中的属性更改。 我可以记录该视图,但是属性更改时处理程序不会触发。

我基本上是想学习当用户单击删除记录时从视图中删除项目的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}}

我认为,管理视图中项目列表的最佳方法是创建列表的属性,仅包含需要呈现的项目,然后在视图中对该列表进行迭代。

使用您的示例(为简单起见,进行了一些更改),我将执行以下操作:

控制器:

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}}

根据经验,如果可能的话,总是喜欢使用属性而不是观察者。 这样,仅在需要时才缓存和计算值,而不是在每次更改时都缓存和计算值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM