0

Я создаю приложение с appcelerator-studio.Как вызвать метод от контроллера к другому контроллеру appcelerator

Приложение создать программно таблицу с этим кодом:

controller.js

var rowData = []; 

    var header = Alloy.createController('result_row_header',{ 
     examination:Titanium.Locale.getString(lang+"examination"), 
     start_date:Titanium.Locale.getString(lang+"start_date"), 
     end_date:Titanium.Locale.getString(lang+"end_date") 
    }); 
    var viewHeader = header.getView(); 


    //DISEGNO LA TESTATA 
    rowData.push(viewHeader); 

    $.table.setData(rowData); 

function set_fields(lang) { 
    header.changeLanguage(lang); 
} 

result_row_header.js

var args = arguments[0] || {}; 

$.examination.text = args.examination; 

$.start_date.text = args.start_date; 

$.end_date.text = args.end_date; 


function changeLanguage(lang){ 
    $.examination.text=Titanium.Locale.getString(lang+"examination"); 
} 

Теперь я хочу, чтобы вызвать метод changeLanguage от controller.js, но если я попытаюсь выполнить метод set_fi leds (from controller.js) У меня есть ошибка.

ответ

1

Просто небольшое изменение в коде:

result_row_header.js

var args = arguments[0] || {}; 

$.examination.text = args.examination; 

$.start_date.text = args.start_date; 

$.end_date.text = args.end_date; 

// this is the code to access function of a controller from any other 
$.changeLanguage = function (lang){ 
    $.examination.text=Titanium.Locale.getString(lang+"examination"); 
}; 

Остальной код остается таким же.

0

Позволяет говорит, что это ваш view.js файл:

$.yourMethod = function() { 

    return 'first'; 
}; 

$.view.yourMethod = function() { 

    return 'second'; 
}; 

И это ваш view.xml:

<Alloy> 
    <View id="view"> 
     <Label text="test view"/> 
    </View> 
</Alloy> 

Вы называете это так:

var view = Alloy.createController("view",{}); 

view.yourMethod(); //will return first 

win.add(view.getView()); 

Но если вы получите представление по методу создания, вы вызываете его так:

var view = Alloy.createController("view",{}).getView(); 

view.yourMethod(); //will return second 

win.add(view); 

Titanium Alloy Controller Constructor doesn't exposer functions