2015-12-14 2 views
1

Когда я нажимаю на ярлык, который находится в datebar.xml функции showPicker() обожженной но DatePicker вид не виден что в datepicker.xmlэкранного объект родительского вида внутри другого зрения

Также предупреждение показывают, как «упс» Где моя вина? Это должно быть ошибка? Я пытаюсь решить эту проблему с 3-х дней.

Также onDone функция не работает, что в 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> 

датаpicker.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> 

И последнее замечание: там не много пользы в определении DatePicker в XML/TSS/JS установленного контроллера. Там нет тонны стилизации и что метод XML/TSS предоставит вам. Почему бы просто не определить его в коде в обработчике событий щелчка метки?

+0

Большое спасибо, но я не могу реализовать ваше предложение, и я не могу изменить свою структуру приложения :( – Kerberos

+0

В вашем оконном контроллере установите ссылку на родителя: '$ .DateBar.parent = $ .win; ' – skypanther

+0

Я так пробовал, но я не могу получить доступ к child.xml index.xml по id. – Kerberos

Смежные вопросы