0

我使用appcelerator-studio构建应用程序。如何从控制器调用方法到另一个控制器编辑器

的应用程序创建使用此代码表:

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(来自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

相关问题