Titanium Appcelerator,获取当前窗口并应用属性不起作用

Titanium Appcelerator,获取当前窗口并应用属性不起作用,titanium,appcelerator,navbar,Titanium,Appcelerator,Navbar,我正在尝试将iOS中的右导航按钮添加到Tianium中的windows中 代码只是Tianium提供的原始“master/detail”起始模板,然后在MasterView.js中,我尝试向导航栏添加一个按钮 但它并不像人们想象的那样工作: var addBtn = Ti.UI.createButton({ systemButton:Ti.UI.iPhone.SystemButton.ADD }); //self.setRightNavButton(addBtn); var win1 =

我正在尝试将iOS中的右导航按钮添加到Tianium中的windows中

代码只是Tianium提供的原始“master/detail”起始模板,然后在MasterView.js中,我尝试向导航栏添加一个按钮

但它并不像人们想象的那样工作:

var addBtn = Ti.UI.createButton({
    systemButton:Ti.UI.iPhone.SystemButton.ADD
});
//self.setRightNavButton(addBtn);
var win1 = Titanium.UI.currentWindow;
win1.setRightNavButton(addBtn);
此操作失败,错误如下:

[错误]:脚本错误=“未定义”不是对象(正在评估) MasterView.js上的“win1.setRightNavButton”(第14行)


那么我如何将此按钮添加到导航栏?我见过一些例子,但它们都依赖于将导航栏声明到位。在这种情况下,这是不可能的,因为Tianium在特定于每个平台的AplicationWindow.js中声明了导航栏,然后调用MasterView.js函数和文件,我应该在其中定义导航栏按钮。

Ti.UI.currentWindow
仅在窗口已经打开时才起作用。您所犯的错误是因为在创建MasterView时,尚未打开窗口

查看ApplicationWindow.js内部,您将看到您甚至在打开窗口之前创建了masterview


如果要设置导航栏项目,请将它们添加到ApplicationWindow、app.js中,或将窗口传递到MasterView。

Ti.UI.currentWindow
仅在使用
url
参数打开窗口时才起作用。在这种情况下,
url
参数引用的控制器将把
Ti.UI.currentWindow
属性设置为该窗口。

与其使用
currentWindow
,不如保留对该窗口的引用。直到今天,我还没有弄清楚如何使用它以及何时使用它以及它是否有效。好吧,我最终只是创建了一个简单的项目,并通过一个指向它的javascript文件名的函数调用每个窗口。看起来有点过时,但它现在可以工作了。但是通过在ApplicationWindow中添加它们,我必须为每个平台生成不同的代码,因为有许多ApplicationWindow.js文件特定于所有平台。我求助于一个非常简单的项目,在这个项目中,对于所有平台,每个窗口只有一个文件。这不是一个理想的解决方案,但最简单的选择是为每个平台编写不同的代码,或者为所有平台编写一次代码,然后再处理每个平台的实现之间的差异。有很多选项,答案的要点是表明Ti.UI.currentWindow仅在已经打开窗口的情况下才起作用。这回答了你的问题。