Javascript ember.js从另一个视图更改视图

Javascript ember.js从另一个视图更改视图,javascript,ember.js,Javascript,Ember.js,我有一个显示列表中所选项目的显示视图。然后,当我点击编辑按钮时,它会通过{{#if isEditing}显示编辑视图 单击列表中的另一个项目时,显示视图将更改为新选定的项目,但仍处于isEditing状态 如何从另一个视图更改视图的isEditing状态 目前,我已经使用FocusOut函数将IsEdit设置为false,但我在该视图中有两个文本字段,因此当我点击另一个文本字段时,它也会触发FocusOut函数 这一定很简单,但似乎无法理解 您不希望两个视图像这样在逻辑上直接连接-相反,您希望通

我有一个显示列表中所选项目的显示视图。然后,当我点击编辑按钮时,它会通过{{#if isEditing}显示编辑视图

单击列表中的另一个项目时,显示视图将更改为新选定的项目,但仍处于isEditing状态

如何从另一个视图更改视图的isEditing状态

目前,我已经使用FocusOut函数将IsEdit设置为false,但我在该视图中有两个文本字段,因此当我点击另一个文本字段时,它也会触发FocusOut函数


这一定很简单,但似乎无法理解

您不希望两个视图像这样在逻辑上直接连接-相反,您希望通过绑定(可能不是在这种情况下,因为edit butotn似乎没有绑定到模型或属性?)或通过控制器层中的函数实现这种关联?

问得好。我认为你需要做一些比简单绑定更复杂的事情来驱动
应用程序的内容。我将尝试另一个计算属性:

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
)会稍微复杂一些,但听起来您似乎不需要这样做

如何从另一个视图更改视图的isEditing状态

我不认为这是你真正想要做的。在项目的单击事件中,您可能正在更改控制器的
内容
属性。每当
内容
更改时,您希望
i编辑
为false

您可以设置观察者来处理此问题:

App.SelectedItemView = Ember.View.extend(
{
    isEditing: false,
    contentBinding: 'App.SelectedItemController.content',
    contentChanged: function ()
    {
        this.set('isEditing', false);
    }.observes("content")
});

嗯,我已经结束了这样做,但它并不漂亮,我相信这不是正确的方式@get('parentView')。get('parentView')。get('childViews')[1]。set('isEditing',false)原来的问题我也很感兴趣。在大多数情况下,通过绑定可能是正确的,但有时您只是不想设置一个额外的Ember.Object或一个额外的属性来将数据从一个视图传递到另一个视图。因此,我认为能够从另一个角度更改数据可能会有所帮助。你说的“通过控制器层”是什么意思?@jasonpgignac你能给我举个例子说明如何通过控制器层做到这一点吗?谢谢