Я пытаюсь заставить это работать в Sencha Fiddle. Проблема я столкнулся в том, что я получаю ошибку на этой линииВ Extjs, как вызвать функцию в представлении с другого контроллера?
MyApp.app.getView('MyApp.view.test2').test();
При нажатии кнопки в текстовом поле, он терпит неудачу с ошибкой (в лог консоли) Uncaught TypeError: MyApp.app.getView (...) .test не является функцией
//Controller
Ext.define('MyApp.controller.test', {
extend: 'Ext.app.ViewController',
alias: 'controller.test',
myVar:0,
init: function() {
}
});
//View
Ext.define('MyApp.view.test', {
extend: 'Ext.form.field.Text',
alias:'widget.test',
controller: 'test',
title: 'Hello',
listeners: {
focus: function(comp){
MyApp.app.getView('MyApp.view.test2').test(); //Fails with an error that test is not a function }
},
renderTo: Ext.getBody()
});
//View
Ext.define('MyApp.view.test2', {
extend: 'Ext.form.Panel',
alias:'widget.test2',
title: 'Hello2',
renderTo: Ext.getBody(),
test:function()
{
alert('in MyApp.view.test2');
}
});
Ext.application({
name: 'MyApp',
launch: function() {
Ext.create('MyApp.view.test');
Ext.create('MyApp.view.test2');
}
});
Вы получаете представление, а не контроллер. Что-то вроде этого, может быть? 'MyApp.app.getView ('MyApp.view.test2'). Controller.test();' – reergymerej
То, что вы пытаетесь сделать, называется * жесткой связью *, что является плохой практикой и, конечно же, не тем, для чего предназначен MVVC. Использовать события/ненавязчивую привязку. – Greendrake
Кроме того, ваша логика должна быть в контроллере. Ваше мнение должно отвечать только за презентацию. http://docs.sencha.com/extjs/6.0/application_architecture/application_architecture.html – Tarabass