2016-03-26 34 views
0

İki çift denetleyicim ve görünümü var. İlk görünüm bir öğe listesi içerirken, ikincisi belirli bir öğenin bazı ayrıntılarını gösterir. Elde etmek istediğim, bir liste öğesine yapılan tıklamanın, onSelect fonksiyonunun ikinci bir detay görünümü kontrolörünü çağırması ve içeriğini seçilen liste öğesiyle güncellemesidir.Çapraz denetleyici işlevini çağırma

//second detail-controller 
updateFunction: function (someText) { 
var view = sap.ui.xmlview("view.Detail"); 
view.byId("someTextField").setText(someText); 
} 

sorunu bu çalışmadığını geçerli:

Sonra
//first list controller 
onSelect : function() { 
var secondController = sap.ui.controller("controller.Detail"); 
secondController.updateFunction("some text"); 
} 

ikinci kontrolöre:

Şimdiye kadar aşağıdaki kodu var. Sap.ui.xmlview görüntülenen aynı görünümü döndürmüyor gibi görünüyor. Kod şu işlemleri zaman : ayrıntılı denetleyicinin

var model = view.getModel(model); 
console.log(model); 

2 içinde fonksiyonları, ancak ilk OnInit veya detay görünümü olay tarafından adlandırılan fonksiyonu adlandırılır dış denetleyici ve ikinci adlandırılır, kimlik farklıdır.

Farklı görünümlerin içeriğini güncellemeyi deneyen böyle bir çapraz denetleyici işlevi nasıl elde edebilirim? Yoksa benim yaklaşımım uygun değil mi? Her iki görünümler görünümü aracılığıyla bunu başarabilirsiniz kez çağrılmış varsa

cevap

0

(benim yukarýya gelen, bu oldukça hacky ve çözülmesi gerektiğini otherway)

this.getView().byId("yourViewId").oController.yourMethod(); 

sizin durumunuzda demektir

onSelect : function() { 
    var secondController = this.getView().byId("view_id").oController; 
    secondController.updateFunction("some text"); 
} 

Belki bu size yardımcı olur, daha iyi bir seçenek olacak kontrolör referansını geçiyor: Calling Controller Function from inside a press handler in sapui5

0

Çözüm buldum.

sap.ui.getCore().byId("__xmlview1"); 

belgelerine var view = sap.ui.xmlview("view.Detail"); göre her zaman yeni bir görünüm oluşturur. Ancak yine de xmlview kimliğini belirtmekle uğraşıyorum. "___xmlview1", dinamik olarak adlandırılmış ad olduğundan ve 1 numaralı sayı, uygulama içindeki seri görünümlerin sayısı anlamına gelir. Yani "view.Detail" oluşturulmadan önce başka bir görünüm oluşturursam, kimlik yeni olanı işaret eder.

böyle xmlview oluşturma:

<mvc:XMLView viewName="view.Detail"></mvc:XMLView> 
2

Ben arası görünümü iletişim için EventBus veya Routing ya kullanmayı öneriyoruz.

örneğin bir öğe (F. E. https://example.com/myUi5App/index.html#/item/123) seçimi gibi bir olay iletişim url'nin hash part (#) kullandığından Yönlendirme güzel. Kullanıcı, uygulamanızda gezinmek için tarayıcı geçmişini ve yer işaretlerini kullanabilir. Bir görünüm, belirli bir URL modeli eşleştirildiğinde bildirilmek üzere yönlendiriciye kayıt olabilir. SAPUI5 Geliştirici Kılavuzu'ndaki örnek, yönlendirme adım adım ve ayrıntılı olarak here ve here ayrıntılı bir şekilde açıklamaktadır.

EventBus, keyfi olayları yayınlayabilen küresel bir nesnedir.İlgilenen herkes EventBus'a kayıt olabilir. Component'da, bir bileşeniniz ve global EventBus varsa kullanmanız gereken bir EventBus vardır.

Her iki teknik de görünümlerinizin ayrıştırılmasına yardımcı olur. Seçim değişikliğini dinleyen bir, çok fazla veya hiç görüşün olup olmadığı önemli değildir. Ve olayı ateşleyen dinleyiciler için önemli değil.