2013-02-01 87 views
0

我試圖找出在Ember內的另一個視圖實例上觀察屬性的最佳方法。目前我有以下代碼似乎不能正常工作。看看文檔,我似乎無法找到任何關於觀察者是否只能爲自己工作的事情。觀察子視圖的屬性

App = Ember.Application.create(); 

App.ApplicationView = Ember.View.extend({ 
    myProperty: false, 
    observerFiredCount: 0, 

    testObserver: function() { 
    var count = this.get('observerFiredCount'); 
    this.set('observerFiredCount', count + 1); 
    }.observes('myProperty'), 

    buttonClick: function(event) { 
    if(this.get('myProperty')) { 
     this.set('myProperty', false); 
    } else { 
     this.set('myProperty', true); 
    } 
    }, 

    willInsertElement: function() { 
    var button = this.$('a'); 
    button.click($.proxy(this.buttonClick, this)); 
    } 
}); 

App.TestObserverView = Ember.View.extend({ 
    testObserverAcrossViews: function() { 
    console.log('hello world'); 
    }.observes('App.ApplicationView.myProperty') 
}); 

我想知道2個問題,這將有助於這裏。

1.是否有可能觀察另一個對象實例的屬性。

2.我用什麼路徑訪問一個childview實例?

任何反饋將不勝感激。我覺得好像有一個更乾淨的方式來做到這一點:)

+0

好的,首先'App.ApplicationView'不是一個實例,它是一個子類,所以App.ApplicationView.myProperty路徑實際上並不是有效的路徑。 – Ivan

回答

1

所有問題的答案是,你從錯誤的角度接近問題。視圖被破壞。他們很短暫。它們並不存在於全球。你需要一個控制器。控制者的壽命很長,並且意味着必須遵守。您應該觀察控制器,而不是試圖觀察視圖。

因此,當視圖上發生點擊事件時,請在控制器上設置一個屬性。應用程序的其他部分可以綁定到控制器上的該屬性。

+0

您的輸入只是幫助了我 - 但是您能否爲控制器概念的新用戶推薦一些控制器讀物?我喜歡MVVM,但確實看到我需要開始合併控制器。我只需要這個控件的導航屬性(我喜歡交互觸發器的簡單性和保持xaml中視圖之間的交互)。感謝您重溫:) – Rachael