ارسال object به datagrid از طریق as3

e_naderlou

Member
با سلام و احترام خدمت همه ی اساتید
فککنم فقط منم که سواد ندارم چون فقط من دارم سوال میکنم
امیدوارم از حوصله ی شما خارج نشده باشه
البته فکر میکنم اگه قرار باشه کسی این انجمن رو به عنوان مرجع بخواد در نظر بگیره این سوالات قطعا به مرور کم و بیش براش پیش خواهد اومد.

و اما سوال این هفته (یاد حدیث هفته توی دوره دبستان میفتم) :wink:

من کدهای زیر رو برای لود از یه rss سایت نوشتم که خب خروچی اون object هستش و مشکلی هم در زمان trace وجود نداره ولی حالا قصد دارم این object داخل datagrid به ترتیب چیده بشه ولی موفق نشدم اطلاعات رو از as3 به mxml بفرستم
PHP:
import flash.events.Event;
			import flash.events.IOErrorEvent;
			import flash.net.URLLoader;
			import flash.net.URLRequest;
			
			protected function xmlClass():void
			{
				var myLoader:URLLoader = new URLLoader();
				myLoader.load(new URLRequest("http://www.xxxxxxxxxxxxxx"));
				myLoader.addEventListener(Event.COMPLETE,onXMLFileLoaded);
				myLoader.addEventListener(IOErrorEvent.IO_ERROR,onIOError);
			}


			protected function onXMLFileLoaded(e:Event):void
			{
				var myXML:XML;
				var title_obj:Object;
				
				myXML = new XML(e.target.data);
				title_obj = myXML.channel.item.title;
				
				for (var i:int=0 ; i< 10 ;  i++ )
				{
					trace(title_obj[i]);
				} 
			}
			protected function onIOError(e:IOErrorEvent):void
			{
				trace(e.toString());
			}
 

triton

کاربر فعال
اطلاعات (Object) را تبدیل به نوعی کن که از IList مشتق شده باشه ... من معمولا از ArrayCollection استفاده می کنم (به خاطر امکانات خوبی که داره) و اون را به dataprovider مربوط به dataGride بده.
 

akherat

مدیر انجمن
title_obj چرا از نوع object هست؟
مگه قرار نیست توش string باشه؟

بعد :

یه آرایه درست کن تمام چیز های که می خوایی تو دیتاگرید نمایش داده بشه رو بریز توش
برای دیتا پروایدر دیتا گرید باید از اینترفیس Ilist استفاده بشه که من ArrayCollection رو پیشنهاد میدم
میایی یه متغیر از نوع arrayCollection درست میکنی فکر کنم تو کانسترکتورش یه array میگیره - اون array تو میدی بهش بعد اون arraycollection رو میدی به datagrid
بعد میایی برای datagrid ت یه itemRenderer مینویسی که چطوری اطلاعات رو نمایش بده
 

e_naderlou

Member
راستش کسری جان من توی فلش از آرایه استفاده میکنم و خیلی هم اوکیه ولی اینجا ارور میده ولی وقتی آبجکته مشکلی نیست فقط بحث کانورت به آرایست و یا استفاده مستقیم از آبجکت توی دیتاگرید
اگه آرایه رو پاس میداد که dataProvider توی دیتا گرید باهاش مچه.
 

triton

کاربر فعال
در اینجا نمی تونی از آرایه های معمولی فلش استفاده کنی، توی پروژه های از نوع فلکس یه کم قوانین MXMLLی میشه چون ابزارت MXMLی هست ، پس بنا به همین قوانین باید از آرایه های IListی استفاده کنی. برای تبدیل از یک حلقه ساده استفاده کن و در هر مرحله یک Object با محتویات دلخواهت بساز و اون را به یک نمونه مثلا از انوع ArrayColletion بده و یا به قول akherat یه آرایه معمولی (Array) بساز و بعد اون را به نمونه ی ArrayColletion بده (نمی دونم توی سازنده بود یا با addAllItems، شاید هم هردو) و حالا از این ArrayColletion در DataGride استفاده کن.
 

e_naderlou

Member
در اینجا نمی تونی از آرایه های معمولی فلش استفاده کنی، توی پروژه های از نوع فلکس یه کم قوانین MXMLLی میشه چون ابزارت MXMLی هست ، پس بنا به همین قوانین باید از آرایه های IListی استفاده کنی. برای تبدیل از یک حلقه ساده استفاده کن و در هر مرحله یک Object با محتویات دلخواهت بساز و اون را به یک نمونه مثلا از انوع ArrayColletion بده و یا به قول akherat یه آرایه معمولی (Array) بساز و بعد اون را به نمونه ی ArrayColletion بده (نمی دونم توی سازنده بود یا با addAllItems، شاید هم هردو) و حالا از این ArrayColletion در DataGride استفاده کن.
شما خودتون تبدیل کردین تا بحال ؟
واللا من تا حالا برای تبدیل یه همچین کارایی میکردم ولی کلا این فلکس با منطق های قبلی من نمیخونه من کلا قاط زدم
PHP:
(()trace(title_obj.toArray);
PHP:
trace(title_obj[i].data as ArrayCollection);

ولی یا ارور میده یا مقدار null برمیگردونه
در صورتی که Object من دقیقا مثل Array عمل میکنه
object
ضمنا dataprovider اصلا نمیشناسه این موارد رو حتی وقتی مقدارش null هستش بالاخره باید بشناسه ولی مقداری برنگردونه نه تنها اینکارو نمیکنه بلکه ارور هم میده
 
آخرین ویرایش:

triton

کاربر فعال
عملگر as خیل ضعیف عمل می کنه و همیشه از پس تبدیل ها بر نمی یاد و وقتی بهت خطا یا null می ده یعنی می گه که من نمی تونم تبدیل را انجام بدهم. مثلا من دیروز این کد را نوشتم:

[JSS]
public static function ConvertMainCatgories(mcList:Vector.<MainCategory>):IList
{
if(!mcList) return null;

var arr:ArrayCollection = new ArrayCollection();
for (var i:int = 0; i < mcList.length; i++)
{
arr.addItemAt(mcList, i);
}

return arr.list;
}
[/JSS]

تا اینجا من یه Vector را تبدیل به یک ArrayCollection کردم. حالا به dataGrid اطلاعات را می دهم:

[JSS]
categoryDataGrid.dataProvider = DataUtility.ConvertMainCatgories(event.categories);
[/JSS]

دست آخر هم اطلاعات را از شی رویداد گرفتم و به متد ConvertMainCatgories دادم، که اون اطلاعات من را به Ilist تبدیل می کنه. می تونی به جای IList آنرا ArrayCollection بگذاری، چون اون IList را در خودش پیاده سازی کرده(implement)، ولی چون من در UML نوع بازگشتی را IList در نظر گرفتم، از اون استفاده کردم.
برای نمایش بهتر هم اول ستون های DataGride را تنظیم کن تا کار قشنگ تر بشه، مثلا من این کار را کردم:

[JSS]
<s:DataGrid id="categoryDataGrid" left="0" right="0" top="30" bottom="0" requestedRowCount="4" resizableColumns="false">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="subCategories" headerText="طبقه بندی ها"
itemRenderer="itemRenderer.SubCategoryColumn"></s:GridColumn>
<s:GridColumn width="100" dataField="href" headerText="لینک"></s:GridColumn>
<s:GridColumn width="100" dataField="title" headerText="عنوان"></s:GridColumn>
</s:ArrayList>
</s:columns>

</s:DataGrid>
[/JSS]
 
آخرین ویرایش:

e_naderlou

Member
ممنون مرد شریف تبدیل به array collection و بعد array اوکی شد
فقط میشه بگید DataUtility دقیقا چه عملی رو انجام میده چون انگار توی پروژه فلکس موبایل نمیشناسه.
فککنم با این ضعف اطلاعات کلا این فلکس برای امثال من مناسب نباشه
بهتره برم همون فلش رو کار کنم که اینهمه مزاحم شما دوستان هم نشم
خر ما از کره گی دم نداشت
:green:
انگار هنوز از نظر مفهوم مشکلات زیادی دارم چون وقتی نمیتونم یه dataProvider ساده رو مقدار دهی کنم لابد گیرم زیاده.

 
آخرین ویرایش:

triton

کاربر فعال
ممنون مرد شریف تبدیل به array collection و بعد array اوکی شد
فقط میشه بگید DataUtility دقیقا چه عملی رو انجام میده چون انگار توی پروژه فلکس موبایل نمیشناسه.
فککنم با این ضعف اطلاعات کلا این فلکس برای امثال من مناسب نباشه
بهتره برم همون فلش رو کار کنم که اینهمه مزاحم شما دوستان هم نشم
خر ما از کره گی دم نداشت
:green:
انگار هنوز از نظر مفهوم مشکلات زیادی دارم چون وقتی نمیتونم یه dataProvider ساده رو مقدار دهی کنم لابد گیرم زیاده.


کلاس DataUtility را خودم ایجاد کردم و وظیفه تبدیل اطلاعات را به اون دادم که یکی از اون متدها ConvertMainCatgories هست.

راه یادگیری فلکس همینه ،اصلا اون را رها نکن. توصیه می کنم که مطلب "چطور باید flash builder/flex را یاد گرفت؟" را حتما بخون. ویدئوی لیندا را حتما ببین، من خودم اون را بیش از 5-6 بار دیدم. در ضمن فلکس همون فلش هست ، پس شما همین الان هم دارید فلش را یاد میگیرید!
 

e_naderlou

Member
کلاس DataUtility را خودم ایجاد کردم و وظیفه تبدیل اطلاعات را به اون دادم که یکی از اون متدها ConvertMainCatgories هست.

راه یادگیری فلکس همینه ،اصلا اون را رها نکن. توصیه می کنم که مطلب "چطور باید flash builder/flex را یاد گرفت؟" را حتما بخون. ویدئوی لیندا را حتما ببین، من خودم اون را بیش از 5-6 بار دیدم. در ضمن فلکس همون فلش هست ، پس شما همین الان هم دارید فلش را یاد میگیرید!
شما درست میگی ولی مثلا توی همین لیندا خیلی راحت میشه dataprovider رو ست کرد چون اصلا تبدیلی در کار نیست و اصلا از as3 متغیری دریافت نمیکنه ضمنا توی اینترنت هم که سرچ میکنی اکثرا مستقیما روی کامپوننت ست میکنن و معمول نیست که از as3 دیتایی ارسال بشه .
ولی با اینحال به توصیه های شما عمل میکنم و لیندا رو خواهم دید البته دیدم ولی بیشتر موضوعی میبینم . که اونم بطور مثال نتونست کانورت اطلاعات رو که شما توسط() addItemAtراهنمایی کردید رو بهم برسونه . و مشکل الانم هم همینطور .
البته با توجه به توصیه ی شما حتما ادامه میدم ولی فککنم خیلی زمانبر باشه.
آیا pdf یا کتابی هست که به صورت موضوعی تمامی متدها و کلاسها و ... رو بصورت جامع توضیح داده باشه؟
 

triton

کاربر فعال
در ویدئوهای لیندا ، فکر کنم در اواسطش بود، دو متدtransferCategories و transferProducts برای همین تبدیل تعریف می کنه (البته اگر اسم ها را اشتباه نگفته باشم)

یا pdf یا کتابی هست که به صورت موضوعی تمامی متدها و کلاسها و ... رو بصورت جامع توضیح داده باشه؟
شاید این بتونه به شما کمک کنه: Flex 4.6 Documentation . البته مثال هاش کامل نیست ولی به یه سرچ می تونی اون ها را هم گیر بیاری
البته کتاب Flash Builder 4 and Flex 4 Bible هم خیلی خوبه و ویدئوهای لیندا یه جورایی خلاصه اون هست.
 

akherat

مدیر انجمن
الان نتونستی به گیرید ویو دیتا پاس بدی؟
الان مشکلت چیه؟
کد رو بزار با شرح مشکلت !
 

e_naderlou

Member
در ویدئوهای لیندا ، فکر کنم در اواسطش بود، دو متدtransferCategories و transferProducts برای همین تبدیل تعریف می کنه (البته اگر اسم ها را اشتباه نگفته باشم)


شاید این بتونه به شما کمک کنه: Flex 4.6 Documentation . البته مثال هاش کامل نیست ولی به یه سرچ می تونی اون ها را هم گیر بیاری
البته کتاب Flash Builder 4 and Flex 4 Bible هم خیلی خوبه و ویدئوهای لیندا یه جورایی خلاصه اون هست.

ببین مرد شریف منظور من دقیقا اینیه که توی عکس هست این عکس رو از آموزش لیندا که شما فرمودی گرفتم
ببین اصلا همچین کلاسی وجود نداره که بخواییم فراخوانی کنیم و بعد بخواییم از متدهاش استفاده کنیم
import utils.DataUtils
Screen Shot 2014-10-12 at 10.45.27 PM.png
 

e_naderlou

Member
الان نتونستی به گیرید ویو دیتا پاس بدی؟
الان مشکلت چیه؟
کد رو بزار با شرح مشکلت !
کسری جان ببین همونطور که فرمودی من آبجکتم رو تبدیل کردم به هم ArrayCollection و همینطور بعدش به Array خب؟
حالا میخوام از تابعی که توی قسمت script با کدهای as3 نوشتم و خروجیش همون ArrayCollection و یا Array هستش میخوام بفرستم به datagrid همین . ولی این dataprovider این Array یا ArrayCollection رو نمیشناسه .
triton عزیز میفرمایند از آموزشهای لیندا کمک بگیرم و خودشونم نمونه کد دادن البته همونطور که در عکسی که از آموزش لیندا گرفتم میبینید توی اون آموزش از import utils.DataUtils استفاده کرده که توی پروژه ی موبایلیه فلکس همچین کلاسی لود نمیشه
حالا نمیدونم من خیلی داغونم یا واقعا این کلاس حداقل اینجا نمیشه استفاده کرد.
اینم عکسش
Screen Shot 2014-10-12 at 10.45.27 PM.png
تاکید میکنم من از Flex Mobile Project استفاده کردم
کتابخانه ها رو همرو فراخوانی کردم ولی فقط از spark دیتا گرید داره ولی توی آموزشها از mx دیتاگرید استخراج کرده
خداکنه تونسته باشم منظورمو برسونم
اینم تصویر آموزش لیندا

Screen Shot 2014-10-12 at 11.10.37 PM.png
اینم دیتا گرید من که فقط از اسپارک پشتیبانی میکنه
Screen Shot 2014-10-12 at 11.13.08 PM.png
 
آخرین ویرایش:

akherat

مدیر انجمن
نگفته پشتیبانی نمی کنه - گفته optimize نیست

متن اررور بزار مرد جون

احتمالا موقعی که داری به دیتا پروایدر پاس میدی هنور کامپلیت نشده !
 

triton

کاربر فعال
...در عکسی که از آموزش لیندا گرفتم میبینید توی اون آموزش از import utils.DataUtils استفاده کرده که توی پروژه ی موبایلیه فلکس همچین کلاسی لود نمیشه ...
عیب ما اینه که موقع دیدن فیلم آموزشی فقط یه پلاستیک تخمه کم داریم! نه کدها را یک بار می نویسیم، و نه اینکه موضوع را دنبال می کنیم و تحقیق می کنیم ... فقط می خواهیم با نگاه کردن فیلم یاد بگیریم!!!
اگر شما زحمت می کشیدید می رفتید داخل فایل های تمرین آموزش، کلاس زیر را پیدا می کردید:

[JSS]
package utils
{
import mx.collections.IList;

import valueObjects.Category;
import valueObjects.Product;

public class DataUtils
{
public static function transformCategories(collection:IList):void
{
for (var i:int = 0; i < collection.length; i++)
{
var obj:Object = collection.getItemAt(i);
var vo:Category = new Category(obj);
collection.setItemAt(vo, i);
}
}
public static function transformProducts(collection:IList):void
{
for (var i:int = 0; i < collection.length; i++)
{
var obj:Object = collection.getItemAt(i);
var vo:product = new Product(obj);
collection.setItemAt(vo, i);
}
}
}
}
[/JSS]
 

e_naderlou

Member
عیب ما اینه که موقع دیدن فیلم آموزشی فقط یه پلاستیک تخمه کم داریم! نه کدها را یک بار می نویسیم، و نه اینکه موضوع را دنبال می کنیم و تحقیق می کنیم ... فقط می خواهیم با نگاه کردن فیلم یاد بگیریم!!!
اگر شما زحمت می کشیدید می رفتید داخل فایل های تمرین آموزش، کلاس زیر را پیدا می کردید:

ازتون بابت همه زحمات عذر میخوام انگار خیلی اعصاب براتون نذاشتما:wink:
ممنونم ازینکه برای موارد بعدی متوچهم کردید که توی این آموزشها صرفا از کلاسهای آماده استفاده نکرده و گاها کلاسی هم نوشتن و ازون هم استفاده کردن اینو برای این گفتم که خب قاعدتا توی آموزش از امکانات پایه استفاده میشه البته منافاتی هم پیش نمیاد در حال حاضر.
در هر صورت بعد از مطالعه ی هلپ نرم افزار بالاخره متوجه این موضوع شدم که برای پروژه های موبایل (مطابق توصیه هایی که در هلپ خود فلکس هست) خیلی بهتره از DataGroup استفاده کرد تا DataGrid
و منم همینکارو کردم و بکل مشکلاتم در دم حل شد خیلی برام جالب بود که چقدر این DataGroup میتونه قوی باشه و همه جور ورودی از همه نوع بگیره یه اسکرولم بهش ست میکنی و کلا اوکی میشه کاملا هم فارسی رو ساپورت میکنه و براحتی میتونه جای کامپوننت list که فارسی نبود رو هم بگیره
کلا اوکیه اوکیه:)
 

جدیدترین ارسال ها

بالا