Прежде всего присваивание totalSpan
выглядит следующим образом:
totalSpan="{Number(Math.round(projectWidth.vl / oneDay))}"
но из width="{projectWidth}"
мы можем видеть projectWidth
это Number
или int
. Так что у него нет vl
свойства. И ваш Number(Math.round(projectWidth.vl / oneDay))
это NaN
. Пожалуйста, перепишите его правильно. Может быть, это должно быть следующим:
totalSpan="{Number(Math.round(projectWidth / oneDay))}"
О второй части. Если вы используете {} в MXML, это означает привязку данных. Привязка данных обеспечивает изменения целевых атрибутов при изменении источника. И в сообщении говорится, что Array
является примитивным типом, и компилятор mxmlc
не может сгенерировать код для обработки изменений значений массива.
Но из кода очевидно, что у вас есть некоторые проблемы со структурами данных. Очень трудно улучшить его, не имея всего кода проекта, но вы должны использовать пользовательские типы данных с необходимыми [Bindable]
метаданными для привязки данных и ArrayCollection
вместо Array
для данных, используемых в качестве источника привязки данных. 1022 *
Попробуйте создать что-то вроде:
[Bindable]
class MyDataObject
{
public var offSet:int;
public var numDays:int;
public var position:int;
public var sName:String;
}
и отправьте эти предметы поставщику данных вашего ретранслятора. Насколько я понимаю, теперь ваш поставщик данных рассчитан на длину ретранслятора, но в реальной жизни он должен предоставлять данные элементов ретранслятора. Поэтому, если вы передадите в свой ретранслятор ArrayCollection
ваших пользовательских MyDataObject
объектов, вы можете использовать что-то вроде следующего:
<mx:Repeater id="indPositions" dataProvider="{projectPositions}">
<components:block height="28"
id="thisBlock" visible="true" horizontalScrollPolicy="off"
width="{projectWidth}"
oneDay="{Number(oneDay)}"
offSet="{indPositions.currentItem.offSet}"
numDays="{indPositions.currentItem.numDays}"
position="{indPositions.currentItem.position}"
sName="{indPositions.currentItem.sName}"
projectName="{projectTitle}"
totalSpan="{Number(Math.round(projectWidth / oneDay))}"
/>
</mx:Repeater>
И даже больше. Вы можете передать весь объект типа MyDataObject
компоненту components:block
:
<mx:Repeater id="indPositions" dataProvider="{projectPositions}">
<components:block height="28"
id="thisBlock" visible="true" horizontalScrollPolicy="off"
width="{projectWidth}"
oneDay="{Number(oneDay)}"
myData="{MyDataObject(currentItem)}"
projectName="{projectTitle}"
totalSpan="{Number(Math.round(projectWidth / oneDay))}"
/>
</mx:Repeater>
Надеюсь, эти мысли помогут!