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

时间:2012-02-02 18:29:52

标签: javascript ember.js

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

显示编辑视图

当我单击列表中的其他项目时,显示视图将更改为新选定的项目,但仍处于isEditing状态。

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

我目前使用FocusOut函数将isEditing设置为false,但此视图中有2个文本字段,因此当我单击其他文本字段时,它也会触发focusOut函数。

这一定很简单,但似乎无法弄明白!

3 个答案:

答案 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?)或通过控制器层中的函数?