Ember.js 未观察到属性更改的余烬视图

Ember.js 未观察到属性更改的余烬视图,ember.js,Ember.js,我是Ember的新手,我正在尝试使用Ember视图来观察控制器中的属性更改。我可以记录视图,但属性更改时处理程序不会启动 我基本上是在尝试学习当用户单击删除记录时从视图中删除项目的余烬方法。我还没有找到这方面的好指南。任何建议都将不胜感激 如果我遗漏了什么,请告诉我。提前谢谢 这是一个继承的代码库;我们还没有准备好升级恩伯 余烬v1.0.0-rc.3 路线 App.PostsRoute=App.AuthenticatedRoute.extend{//Em.Route的扩展 型号:功能{ retu

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

我基本上是在尝试学习当用户单击删除记录时从视图中删除项目的余烬方法。我还没有找到这方面的好指南。任何建议都将不胜感激

如果我遗漏了什么,请告诉我。提前谢谢

这是一个继承的代码库;我们还没有准备好升级恩伯

余烬v1.0.0-rc.3

路线 App.PostsRoute=App.AuthenticatedRoute.extend{//Em.Route的扩展 型号:功能{ return App.Post.list;//返回帖子列表 }, 活动:{ //在post上下文中呈现模态 showDeleteModal:functionmodel{ 此.render'modals/_confirmation'{ 进入:"岗位",, 出口:'模态', 控制员:“岗位” }; 此.controllerFor'post'。设置'model',model; } } }; 控制器 App.PostsController=Em.ObjectController.extendApp.PagedTable,余烬.Evented{ // ... }; App.PostController=Em.ObjectController.extend{ 傅:错, 戴尔:功能{ 这个。设置'foo',true; } }; 看法 App.PostsView=Em.View.extend; App.PostView=Em.View.extend{ didInsertElement:函数{ console.log'Inserted!'; }, 测试:功能{ console.log'Observed!'; }.观察“controller.foo” }; 样板
在我看来,在视图中管理项目列表的最佳方法是创建列表的属性,仅包含需要显示的项目,并在视图中迭代该列表

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

控制器:

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}}
根据经验,如果可能的话,总是倾向于使用属性而不是观察者。
这样,只有在需要时才缓存和计算值,而不是在每次更改时。

在我看来,管理视图中项目列表的最佳方法是创建列表属性,仅包含需要显示的项目,并在视图中迭代该列表

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

控制器:

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}}
根据经验,如果可能的话,总是倾向于使用属性而不是观察者。
通过这种方式,仅在需要时缓存和计算值,而不是在每次更改时进行计算。

感谢您花时间提供解决方案。这似乎是一个更好的方式来处理我正在做的事情。我试试这个!很好的建议,但它并不能真正解释为什么视图上的观察者不工作。我很想知道。@neverfox:创建一个jsbin,我来看看。在现代项目中,请使用arrayComputed方法。感谢您花时间提供解决方案。这似乎是一个更好的方式来处理我正在做的事情。我试试这个!很好的建议,但它并不能真正解释为什么视图上的观察者不工作。我很想知道。@neverfox:创建一个jsbin,我来看看。在现代项目中,请使用arrayComputed方法。