在目标c中,我们可以通过nextClassname.recievedVariable = passedVariable;
非常容易地在两个类之间传递数据我尝试使用钛,但失败了
我尝试如下
在第二课
$.table.addEventListener('click', function(e) {
var selected = e.row;
alert(e.row.title);
var TodayStatus = Titanium.UI.createWindow({ url:'TodayStatus.js' });
TodayStatus.seletedProj = e.row.title;
// var TodayStatus = new Alloy.createController("TodayStatus");
TodayStatus.getView().open();
});
在第一个Calss中,我们必须从另一个类接收字符串
var win = Ti.UI.currentWindow;
Ti.API.info(win.seletedProj);
但会导致错误,如
message = "'undefined' is not an object (evaluating 'win.seletedProj')";
[ERROR] : name = TypeError;
答案 0 :(得分:1)
您可以通过传递这样的参数来传递数据。
x.addEVentListener('click', function(e){
var controller = require('controllerPath').createWindow(e.value);
controller.open();
})
在controller.js中
exports.createWindow = function(value)
{
//whatever You like to do with UI
}
答案 1 :(得分:0)
如果使用'url'参数创建一个新窗口,它会自动将该代码放入其自己的Sub-context中,并且无法传递复杂对象,请参见此处:
http://docs.appcelerator.com/titanium/3.0/#!/api/Titanium.UI.Window
我不再倾向于这样做了。
我这样做的方法是将todayStatus窗口创建为常见的js类:
// todayStatus.js
var win = Ti.UI.createWindow({ top:0, left: 0, right: 0, bottom:0, etc... });
//any extra visual building code can go here
win.open();
exports.seletedProj = function(rowTtl){
//this function is available outside the class
}
然后你可以从你的主类中引用它:
// main.js
var TodayStatus = require('todayStatus');
TodayStatus.seletedProj(e.row.title);
etc...
希望有所帮助
答案 2 :(得分:0)
请参阅此处的链接,了解如何在Alloy中进行操作,
https://github.com/aaronksaunders/alloy_fugitive/blob/master/app/controllers/Fugitives.js#L29
但基本思路是在创建新控制器时将对象作为参数传递。
$.table.addEventListener('click', function(_e) {
var detailController = Alloy.createController('FugitiveDetail', {
parentTab : $.fugitiveTab,
data : fugitiveCollection.get(_e.rowData.model)
});
$.fugitiveTab.open(detailController.getView());
});
我提供的链接使用Alloy
提供了完整的解决方案