ember.js 从另一个视图更改视图
Posted
技术标签:
【中文标题】ember.js 从另一个视图更改视图【英文标题】:ember.js changing a view from another view 【发布时间】:2012-02-02 18:29:51 【问题描述】:我有一个显示视图,它显示列表中的选定项目。然后,当我单击编辑按钮时,它会通过 #if isEditing 显示编辑视图
当我单击列表中的另一个项目时,显示视图会更改为新的选定项目,但仍处于 isEditing 状态。
如何从另一个视图更改视图的 isEditing 状态?
目前我已经使用将 isEditing 设置为 false 的 FocusOut 函数完成了此操作,但我在此视图中有 2 个文本字段,因此当我单击另一个文本字段时,它也会触发 focusOut 函数。
这一定很简单,但似乎无法弄清楚!
【问题讨论】:
好吧,我最终这样做了,但它并不漂亮,我敢肯定这不是正确的方法! @get('parentView').get('parentView').get('childViews')[1].set('isEditing', false) 【参考方案1】:好问题。我认为您需要做一些比简单绑定更复杂的事情来驱动App.SelectedItemView
的内容。我会尝试另一个计算属性:
App.SelectedItemView = Ember.View.extend(
isEditing: false,
content: function()
var selectedItem = App.SelectedItemController.get('content');
this.set('editingItem', false);
return selectedItem;
.property('App.SelectedItemController.content'),
);
关于计算属性的技巧是,您可以完成与简单绑定相同的事情,但您也可以添加自定义代码以在观察值更改时执行(例如在这种情况下有条件地将 editingItem
设置为 null
) .计算属性的缺点是进行双向绑定有点复杂(例如,在这种情况下,每当App.SelectedItemView.content
更改时设置App.SelectedItemController.content
)——但听起来你不需要这样做无论如何。
【讨论】:
【参考方案2】:如何从另一个视图更改视图的 isEditing 状态?
我不认为这是你真正想要做的。在该项目的单击事件中,您可能正在更改控制器的 content
属性。只要content
发生变化,您就希望isEditing
为假。
你可以设置一个观察者来处理这个:
App.SelectedItemView = Ember.View.extend(
isEditing: false,
contentBinding: 'App.SelectedItemController.content',
contentChanged: function ()
this.set('isEditing', false);
.observes("content")
);
【讨论】:
【参考方案3】:您不希望两个视图像这样在逻辑上直接连接 - 相反,您希望这种关联通过绑定发生(可能不是在这种情况下,因为编辑按钮似乎没有绑定到模型或属性?)还是通过控制器层中的函数?
【讨论】:
原来的问题也让我很感兴趣。在大多数情况下,通过绑定可能是正确的,但有时您只是不想设置一个额外的 Ember.Object 或一个额外的属性,只是为了将数据从一个视图传递到另一个视图。因此,我认为能够从另一个视图更改数据可能会有所帮助。 “通过控制器层”是什么意思? @jasonpgignac 请您给我看一个如何通过控制器层执行此操作的示例?谢谢以上是关于ember.js 从另一个视图更改视图的主要内容,如果未能解决你的问题,请参考以下文章