2015-12-14 22 views
1

當我點擊標籤,這是在燒datebar.xml showPicker()函數,但日期選擇器視圖不可見其在datepicker.xml從另一種觀點認爲Accesing內部父視圖的對象

而且警報顯示,像是「哎呀」我的錯在哪裏?它應該是一個錯誤?自3天以來,我試圖解決這個問題。

不工作也onDone功能在iOS上

datepicker.js預先感謝您。我測試platfom是iOS和我的SDK是5.1.1 GA

<Alloy autoStyle="true"> 
    <Window> 
     <View id="ViewDateBar"> 
      <Require type="view" src="datebar" id="DateBar" /> 
     </View> 
      <Require type="view" src="datepicker" id="DatePicker" /> 
    </Window> 
</Alloy> 

datebar.xml

<Alloy> 
    <View id="datebar"> 
     <Label onClick="ShowDatePicker"/> 
    </View> 
</Alloy> 

datebar.js

var ViewDatePicker = Alloy.createController("datepicker", { 
    onDone : function(SelectedDate) { 
     Alloy.Globals.JsonQsDateCurrent = SelectedDate; 
    } 
}); 

function ShowDatePicker() { 
    ViewDatePicker.getView().showDatePicker(); 
} 

datepicker.xml

<Alloy> 
    <View id="datepicker" visible="false"> 
     <Picker id="picker" /> 
    </View> 
</Alloy> 

datepicker.js

var moment = require("alloy/moment"); 
var args = arguments[0] || {}; 
var onDone = args.onDone; 

init(); 

function init() { 

    if (OS_IOS) { 
     $.picker.setType(Titanium.UI.PICKER_TYPE_DATE); 
    } 

} 

function showDatePicker() { 

    if (OS_IOS) { 
     //> The iOS Picker will be slide up anddown the screen. 
     $.picker.setValue(Alloy.Globals.DateCurrent.toDate()); 
     $.datepicker.visible = true; 

    } else if (OS_ANDROID) { 
     //> The Android picker will be a pop-up dialog. 
     $.picker.showDatePickerDialog({ 
      value : Alloy.Globals.DateCurrent.toDate(), 
      callback : function(e) { 
       if (e.cancel) { 
        Ti.API.info('User canceled dialog'); 
       } else { 
        done(e); 
       } 
      } 
     }); 
    } 
} 

function done(e) { 


    if (OS_IOS) { 
     hideDatePicker(); 
     onDone(selectedDate($.picker)); 
    } else if (OS_ANDROID) { 
     if (!e.cancel) { 
      onDone(selectedDate(e)); 
     } 
    } 

} 

function hideDatePicker() { 
     $.datepicker.visible = false; 

} 

function selectedDate(picker) { 
    return moment(picker.value); 
} 

$.datepicker.showDatePicker = showDatePicker; 
$.datepicker.hideDatePicker = hideDatePicker; 

回答

2

如果您在JavaScript中定義了您的需求,則可以將引用傳遞給父級。

window.js:

var dateBar = Alloy.createController('datebar', {parent: $.win}); 

我不知道爲什麼你將你的控制器,你現在的樣子。你可以這樣做嗎?

<Alloy autoStyle="true"> 
    <Window> 
     <View id="ViewDateBar"> 
      <Require type="view" src="datebar" id="DateBar" /> 
     </View> 
    </Window> 
</Alloy> 

databar.xml:

<Alloy> 
    <View id="datebar"> 
     <Label onClick="ShowDatePicker"/> 
     <Require type="view" src="datepicker" id="DatePicker" /> 
    </View> 
</Alloy> 

而且最後的評論:有沒有在一個XML/TSS/JS控制器集定義一個datepicker多少好處。沒有多少樣式,並且XML/TSS方法會爲您提供。爲什麼不簡單地在標籤的click事件處理程序的代碼中定義它?

+0

非常感謝你,但我無法實現你的建議,我不能改變我的應用程序結構:( – Kerberos

+0

在你的窗口控制器中,設置對父項的引用:'$ .DateBar.parent = $ .win; ' – skypanther

+0

我嘗試過那樣,但我無法通過id訪問index.xml子項。 – Kerberos

相關問題