2016-03-26 2 views
0

У меня есть две пары контроллера и вид. Первое представление содержит список элементов, а во втором - некоторые детали определенного элемента. Я хочу добиться того, чтобы щелкнуть по одному элементу списка, функция onSelect должна вызвать второй контроллер подробного представления и обновить его содержимое с выбранным элементом списка.Вызов функции перекрестного контроллера

До сих пор у меня есть следующий код:

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

Затем во втором контроллере:

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

Проблема заключается в том, что это не работает. Кажется, что sap.ui.xmlview не возвращает тот же вид, который отображается. Когда я выполнить следующий код:

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

в пределах 2 функции контроллера подробно, но сначала вызывается внешним контроллером и второй вызывается OnInit или функции, вызываемой вид детали события, идентификатор отличается.

Как я могу достичь такой функции перекрестного контроллера с обновлением содержимого разного вида? Или мой подход не подходит?

ответ

0

Если обе точки зрения были названы, как только вы можете добиться этого с помощью зрения (с моей opionion, это вполне Hacky и должна быть решена otherway)

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

означает в вашем случае

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

Возможно, это поможет вам, он передает контрольную ссылку, которая была бы лучшим вариантом: Calling Controller Function from inside a press handler in sapui5

0

Я нашел решение.

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

Согласно документации var view = sap.ui.xmlview("view.Detail"); всегда создает новый вид.

Однако я все еще боюсь указывать идентификатор xmlview. Поскольку «___xmlview1» является динамически заданным именем, а число 1 означает серийный номер представлений в приложении. Поэтому, если я создаю другое представление перед созданием «view.Detail», идентификатор укажет на новый.

Я создаю xmlview так:

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

Я бы рекомендовал использовать либо EventBus или Routing для взаимо- вид связи.

Routing хороша, как она использует hash part (#) в URL, чтобы общаться, например, событие, как при выборе пункта (F.E. https://example.com/myUi5App/index.html#/item/123). Пользователь может использовать историю браузера и закладки для навигации по вашему приложению. Вид может регистрироваться на маршрутизаторе, который будет уведомлен, когда будет определен соответствующий шаблон URL. Пошаговое руководство в Руководстве для разработчиков SAPUI5 прекрасно объясняет маршрутизацию шаг за шагом и подробно here и here.

EventBus - глобальный объект, который может публиковать произвольные события.Любой желающий может зарегистрироваться на EventBus. Существует EventBus на Component, который вы должны использовать, если у вас есть компонент и global EventBus.

Оба метода помогают развязать ваши взгляды. Не имеет значения, есть ли один, много или ни одного вида, которые слушают изменение выбора. И это не имеет значения для слушателей, которые уволили это событие.

Смежные вопросы