2012-02-02 49 views
6

我有一個顯示視圖,顯示列表中的所選項目。然後,當我點擊編輯按鈕時,它顯示編輯視圖通過{{#if isEditing}}ember.js從另一個視圖更改視圖

當我單擊列表中的另一個項目時,顯示視圖更改爲新的選定項目,但仍處於isEditing狀態。

如何從另一個視圖更改視圖的isEditing狀態?

我已經使用FocusOut函數設置isEditing爲false,但在此視圖中有2個文本字段,因此當我點擊其他文本字段時,它也會觸發focusOut函數。

這一定很簡單,但似乎無法弄清楚!

+0

嗯,我已經結束了這樣做,但它不是漂亮,我敢肯定,這不是正確的方式! @get('parentView')。get('parentView')。get('childViews')[1] .set('isEditing',false) – 2012-02-02 23:55:52

回答

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.SelectedItemView.content發生更改時設置App.SelectedItemController.content) - 但聽起來您不需要這樣做。

0

您不希望兩個視圖在邏輯上直接相連 - 相反,您希望通過綁定來實現此關聯(可能不是這種情況,因爲編輯butotn似乎沒有綁定到模型或屬性?)還是通過控制器層中的函數?

+0

原始問題也非常感興趣。對於大多數情況,通過綁定可能是正確的,但有時候您不想設置額外的Ember.Object或額外的屬性,只是將數據從一個視圖傳遞到另一個視圖。 因此,我認爲能夠從另一個視圖更改數據可能會有所幫助。 「通過控制器層」是什麼意思? – 2012-02-03 14:28:40

+0

@jasonpgignac請你可以告訴我一個如何通過控制器層做到這一點的例子嗎?謝謝 – 2012-02-04 19:07:56

1

如何從另一個視圖更改視圖的isEditing狀態?

我不認爲這真的是你想要做的。在該項目的點擊事件中,您可能正在更改控制器的content屬性。當content更改時,您希望isEditing爲假。

您可以設置一個觀察者來處理這個:

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