2016-02-24 4 views
0

Я не могу получить несколько экземпляров виджета для работы. Если я не использую модуль в виджетах, я могу сделать несколько экземпляров. Если я использую несколько экземпляров этого в виджетах, будет работать только последний.Получение нескольких экземпляров виджета с модулем для работы в представлении

У меня есть этот widget.xml

<Alloy> 
    <View id="container" class="container"></View> 
</Alloy> 

Это widget.js

var args = arguments[0] || {}; 
var TiCircularSlider = require('de.marcelpociot.circularslider'); 
var lw = _.has(args, 'height') ? args.height*.05 : 5; 
Ti.API.info("args: " + JSON.stringify(args)); 
var sliderView = TiCircularSlider.createView({ 
    top:_.has(args, 'top') ? args.top : 10, 
    height: _.has(args, 'height') ? args.height : 100, 
    width: _.has(args, 'width') ? args.width : 100, 
    lineWidth: lw, 
    filledColor: _.has(args, 'filledColor') ? args.filledColor : "blue", 
    unfilledColor: _.has(args, 'unfilledColor') ? args.unfilledColor : "gray", 
}); 

sliderView.addEventListener('change',function(e){ 
    Ti.API.info("e.value in sliderView event listener: " + e.value); 
}); 
$.container.add(sliderView); 

Когда я называю это либо в XML:

<Alloy> 
    <Window id="win" backgroundColor="white"> 
    <View id="container" class="container"> 
      <Widget id="btn" top="100" src="btnCircularSlider"/> 
      <Widget id="btn2" top="200" src="btnCircularSlider"/> 
      <Widget id="btn3" top="300" src="btnCircularSlider"/> 
     </View> 
    </Window> 
</Alloy> 

или с помощью кода, используя Alloy.createWidget работает только последний экземпляр. Only Last One Works

+0

у меня есть своего рода обходной путь. Я отказался от виджета и просто создал js-библиотеку и поместил ее в каталог lib, который создает sliderView с дополнительным материалом и возвращает его таким образом. – kgividen

ответ

1

@pxtrick нашел проблему.

Установите входящее верхнее значение в $.container, не sliderView ... как это:

$.container.top = _.has(args, 'top') ? args.top : 10; 
var sliderView = TiCircularSlider.createView({ 
    height: _.has(args, 'height') ? args.height : 100, 
    width: _.has(args, 'width') ? args.width : 100, 
    lineWidth: lw, 
    filledColor: _.has(args, 'filledColor') ? args.filledColor : "blue", 
    unfilledColor: _.has(args, 'unfilledColor') ? args.unfilledColor : "gray" 
}); 

При переходе top в модуль, он устанавливает верхнюю часть «круга» в представлении (созданные с помощью модуль), создавая таким образом длинный прозрачный прямоугольник. Установка в контейнере top сохраняет вид (созданный модулем) как квадрат и просто позиционирует его там, где вы хотите. Чтобы увидеть, что я имею в виду, попробуйте установить borderColor на виджете container, как это в widget.tss: `` ` '#container': { высота: Ti.UI.SIZE, ширина: Ti.UI.SIZE, BorderColor : '# f00' }

enter image description here

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