我有一个显示视图,显示列表中的选定项目。然后当我点击编辑按钮时,它会通过{{#if isEditing}}
显示编辑视图当我单击列表中的其他项目时,显示视图将更改为新选定的项目,但仍处于isEditing状态。
如何从另一个视图更改视图的isEditing状态?
我目前使用FocusOut函数将isEditing设置为false,但此视图中有2个文本字段,因此当我单击其他文本字段时,它也会触发focusOut函数。
这一定很简单,但似乎无法弄明白!
答案 0 :(得分:3)
好问题。我认为你需要做一些比简单绑定更复杂的事情来驱动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.SelectedItemController.content
更改时设置App.SelectedItemView.content
) - 但听起来好像你没有无论如何都需要这样做。
答案 1 :(得分:1)
如何从另一个视图更改视图的isEditing状态?
我不认为这真的是你想要做的。在项目的单击事件中,您可能正在更改控制器的content
属性。只要isEditing
发生更改,您就希望content
为false。
您可以设置一个观察者来处理:
App.SelectedItemView = Ember.View.extend(
{
isEditing: false,
contentBinding: 'App.SelectedItemController.content',
contentChanged: function ()
{
this.set('isEditing', false);
}.observes("content")
});
答案 2 :(得分:0)
你不希望两个视图在这里直接逻辑连接 - 相反,你会希望这种关联通过绑定发生(可能不是在这种情况下,因为编辑butotn似乎没有绑定到模型或property?)或通过控制器层中的函数?